2013-04-18 11 views
6

すべてのビューを保持するLinearLayoutを含むHorizo​​ntalScrollViewがあります。私は、LinearLayoutにImageViewとTextViewを含む約20のRelativeLayoutを追加します。 ImageViewが画面上にある場合(ImageViewにスクロールするとき)にのみ画像をロードしたいと思います。Androidは、horizo​​ntalScrollViewで表示される画像のみをダウンロードします。

getHitRect()を使用するには、this postを試してみましたが、サムネイルのRect(境界)は常に0、0-0、0となり、結果としてfalseが返されます。私は間違って何をしていますか?

thumbnailLayoutがHorizo​​ntalScrollView
thumbnailScroll内部の私のLinearLayout私Horizo​​ntalScrollViewある

runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
      Log.e(TAG, "running"); 
      for (int i = 0; i < thumbnailLayout.getChildCount(); i++) { 
       RelativeLayout view = (RelativeLayout) thumbnailLayout.getChildAt(i); 
       ImageView thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
       if (thumbnailIsOnScreen(thumbnail)) { 
        Log.e(TAG, items.get(i).getTitle() + " has downloaded"); 
        app.setImage(items.get(i).getThumbnailSmall(), thumbnail); 
       } 
      } 


     } 
    }); 

private boolean thumbnailIsOnScreen(ImageView thumbnail) { 
     Rect bounds = new Rect(); 
     thumbnail.getHitRect(bounds); 

     Rect scrollBounds = new Rect(thumbnailScroll.getScrollX(), thumbnailScroll.getScrollY(), 
       thumbnailScroll.getScrollX() + thumbnailScroll.getWidth(), thumbnailScroll.getScrollY() 
         + thumbnailScroll.getHeight()); 
     return Rect.intersects(scrollBounds, bounds); 
    } 

編集 である私はTreeObserverを使用してTREDとthumbailsが画面上にあるかどうかを確認するために私の方法が間違っていることがわかっています。 (私はonPreDrawListener使用しているので?)それはまだすべての画像をつかみ、常にループ

thumbnailLayout.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { 

      @Override 
      public boolean onPreDraw() { 
       Log.e(TAG, "running"); 

       for (int i = 0; i < thumbnailLayout.getChildCount(); i++) { 
        RelativeLayout view = (RelativeLayout) thumbnailLayout.getChildAt(i); 
        ImageView thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
        if (thumbnailIsOnScreen(thumbnail)) { 
         Log.e(TAG, items.get(i).getTitle() + " has downloaded"); 
         app.setImage(items.get(i).getThumbnailSmall(), thumbnail); 
        } 
       } 
       return true; 
      } 
     }); 
+0

あなたはRunnableをどこから呼び出していますか?それはスクロールリスナーにありますか? – dmon

+0

ImageViewsをLinearLayoutに追加した後、Imを実行しています。私はimageViewsがLinearLayoutに追加された後、いくつかの画像をロードする必要があると考えていました。次にスクロールリスナーを使用します – heero

+0

アダプタを使用してギャラリーを使用できますか? – Ethan

答えて

0

あなたはListViewコントロールを必要とするが、ネイティブHorizo​​ntallListViewはアンドロイドではありません。 HorizontallListView by DevSmartを試すことができます。それはあなたが望むならアダプターとカスタムビューを備えたネイティブリストビューのように機能します。

私はあなたに役立つことを望むので、私はこれがあなたを助けてくれることを願っています。

0

ViewPagerの使用について考えましたか? http://developer.android.com/reference/android/support/v4/view/ViewPager.html

それはあなたのデザインに適合しない場合は、ScrollViewをオーバーライドする必要が - >関数はonScrollChangedと、画面であなたのイメージが画像(左?)の位置を確認した場合、スクロール位置に比べてそこに確認してください。

関連する問題