我想检查一下View
中的ScrollView
目前是否在Android中可见。我不是在检查它是否还在关注但是如果它当前正在屏幕上显示。 View
中是否有方法可以告诉我当前视图是否可见?
答案 0 :(得分:22)
此代码适用于我:
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);
}
答案 1 :(得分:15)
int[] location = new int[2];
view.getLocationOnScreen(location);
或
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
现在使用此位置或矩形来检查它是否在您的可见边界内。如果它只是整个屏幕,请检查getResources().getDisplayMetrics()
。
正如Antek在下面的评论中指出的那样,视图可能仍然消失或不可见,返回值告诉它最后绘制的位置。因此,将上述与边界相关的条件与view.isShown()
或view.getVisibility() == VISIBLE
相结合应该可以解决这个问题。
答案 2 :(得分:1)
尝试
if(view.isShown()) {
// Visible
} else {
// Invisible
}
答案 3 :(得分:0)
zegee29's 回答很有帮助。虽然我也想建议使用 view.getGlobalVisibleRect(actualPosition)
的结果,因为在某些情况下,当项目根本不可见时 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)
答案 4 :(得分:-17)
函数View.getVisibility()可以具有以下值:
View.VISIBLE(0):视图可见。
View.INVISIBLE(1):视图不可见,但仍然占用了布局空间。
View.GONE(2):视图消失了。完全隐藏,就像没有添加视图一样
您可以在下面看到链接以获取更多信息。 How can I check if a view is visible or not in Android?