我有一个定义如下的ScrollView:
<ScrollView
...
.../>
<LinearLayout
...
...>
<!-- content -->
</LinearLayout>
</ScrollView>
我用一些ImageView动态地填充了LinearLayout。现在,是否有一种方法可以检查当一个ImageView变得可见或不可见时(例如当我向下滚动时)?
我有一个定义如下的ScrollView:
<ScrollView
...
.../>
<LinearLayout
...
...>
<!-- content -->
</LinearLayout>
</ScrollView>
我用一些ImageView动态地填充了LinearLayout。现在,是否有一种方法可以检查当一个ImageView变得可见或不可见时(例如当我向下滚动时)?
要检查视图是否完全/部分可见,您可以使用:
boolean isViewVisible = view.isShown();
要确定它是否完全可见,请使用以下方法:
Rect rect = new Rect();
if(view.getGlobalVisibleRect(rect)
&& view.getHeight() == rect.height()
&& view.getWidth() == rect.width() ) {
// view is fully visible on screen
}
view.getGlobalVisibleRect(rect)
返回true :( - FaridRect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (imageView.getLocalVisibleRect(scrollBounds)) {
// imageView is within the visible window
} else {
// imageView is not within the visible window
}
我为了得到一个准确的答案苦苦挣扎,以下方法解决了我的问题。
final ScrollView scrollView = findViewById(R.id.scrollView);
scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (yourImageView.getLocalVisibleRect(scrollBounds)) {
// The ImageView is Visible on the screen while scrolling
} else {
// The ImageView is not Visible on the screen while scrolling
}
}
});
在OnScrollChangedListener中的代码不断检查ImageView是否可见并显示在屏幕上,一旦滚动并且ImageView不可见,它会立即被检测到。