我有一个 HorizontalScrollView,其中包含一个 LinearLayout 来保存我的所有视图。我在 LinearLayout 中添加了大约 20 个包含 ImageView 和 TextView 的 RelativeLayout。如果 ImageView 在屏幕上(当我滚动到 ImageView 时),我只想加载图像。
我尝试按照这篇文章在缩略图上使用getHitRect()
, 但是,缩略图的 Rect(边界)始终为 0、0-0、0,导致我的方法返回 false。我究竟做错了什么?
thumbnailLayout
是我在 HorizontalScrollView 内的 LinearLayout 是我的 Horizo
thumbnailScroll
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 并发现我检查缩略图是否在屏幕上的方法是错误的。它仍然抓取所有图像,并不断循环(因为我使用的是 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;
}
});