2013-04-18 12 views
6

Ich habe eine HorizontalScrollView, die eine LinearLayout enthält, um alle meine Sicht zu halten. Ich füge ungefähr 20 RelativeLayout hinzu, das eine ImageView und TextView zum LinearLayout enthält. Ich möchte nur Bilder laden, wenn die ImageView auf dem Bildschirm ist (ich scrolle zum ImageView).Android nur Bilder herunterladen, die in horizontalScrollView sichtbar sind

Ich versuchte folgende this post zu verwenden getHitRect(), auf der Miniaturansicht, aber die Rect (Grenzen) für die Miniaturansicht ist immer 0, 0-0, 0, was zu meiner Methode, false zurückzugeben. Was mache ich falsch?

thumbnailLayout ist mein Linearlayout innerhalb des HorizontalScrollView
thumbnailScroll ist mein HorizontalScrollView

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); 
    } 

bearbeiten Ich verwende TreeObserver tred und festgestellt, dass meine Methode zu überprüfen, ob die thumbails auf dem Bildschirm sind falsch. Es greift immer noch alle Bilder, und ständig Schleifen (weil ich bin mit 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

Woher rufst du das Runnable? Ist es im Scroll-Listener? – dmon

+0

Ich führe es aus, nachdem ich die ImageViews dem LinearLayout hinzugefügt habe. Ich dachte, nachdem die ImageViews zum LinearLayout hinzugefügt wurden, mussten einige Bilder geladen werden. Dann würde ich den Scroll-Listener verwenden – heero

+0

Könnten Sie eine Galerie mit einem Adapter verwenden? – Ethan

Antwort

0

Sie benötigen einen Listview, aber es gibt keine native HorizontallListView in Android. Sie können versuchen, HorizontallListView by DevSmart. Es funktioniert wie eine native Listenansicht, mit Adaptern und benutzerdefinierten Ansichten, wenn Sie möchten.

Yo lo estoy utilizando en mi proyecto por la misma razón que tu, für cargar solo las imagenes sichtbar, so hoffe ich, das kann Ihnen helfen.

Verwandte Themen