我想检查 aView
中的 aScrollView
当前是否在 Android 中可见。我没有检查它是否集中在屏幕上,但它当前是否显示在屏幕上。有没有一种方法View
可以告诉我视图当前是否可见?
6 回答
这段代码对我有用:
public static boolean isVisible(final View view) {
if (view == null) {
return false;
}
if (!view.isShown()) {
return false;
}
final Rect actualPosition = new Rect();
view.getGlobalVisibleRect(actualPosition);
final Rect screen = new Rect(0, 0, getScreenWidth(), getScreenHeight());
return actualPosition.intersect(screen);
}
int[] location = new int[2];
view.getLocationOnScreen(location);
或者
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
现在使用这个位置或矩形来检查它是否在你的可见范围内。如果只是整个屏幕,请检查getResources().getDisplayMetrics()
.
正如 Antek 在下面的评论中指出的那样,视图可能仍然消失或不可见,这里的返回值告诉了它上次绘制的位置。因此,将上述与边界相关的条件与view.isShown()
or结合起来view.getVisibility() == VISIBLE
应该注意这一点。
zegee29 的回答很有帮助。虽然我也想建议使用的结果view.getGlobalVisibleRect(actualPosition)
,因为在某些情况下,当 item 根本不可见时Rect.intersects()
返回,所以结果代码是:true
fun View.isVisible(): Boolean {
if (!isShown) {
return false
}
val actualPosition = Rect()
val isGlobalVisible = getGlobalVisibleRect(actualPosition)
val screenWidth = Resources.getSystem().displayMetrics.widthPixels
val screenHeight = Resources.getSystem().displayMetrics.heightPixels
val screen = Rect(0, 0, screenWidth, screenHeight)
return isGlobalVisible && Rect.intersects(actualPosition, screen)
}
或者你可能只是结果getGlobalVisibleRect(actualPosition)
尝试
if(view.isShown()) {
// Visible
} else {
// Invisible
}
public boolean checkVisiblity(查看视图){
if(view.isShown()) 返回真;否则返回假;
}
函数 View.getVisibility() 可以具有以下值:
View.VISIBLE (0):视图可见。
View.INVISIBLE (1):视图是不可见的,但它仍然占用空间用于布局。
View.GONE (2):视图消失了。完全隐藏,好像没有添加视图
您可以查看以下链接以获取更多信息。 如何检查视图在 Android 中是否可见?