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;
}
});
Woher rufst du das Runnable? Ist es im Scroll-Listener? – dmon
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
Könnten Sie eine Galerie mit einem Adapter verwenden? – Ethan