如何判断Android中的视图是否可见?

时间:2012-12-26 10:43:09

标签: android android-view android-scrollview visible

我想检查一下View中的ScrollView目前是否在Android中可见。我不是在检查它是否还在关注但是如果它当前正在屏幕上显示。 View中是否有方法可以告诉我当前视图是否可见?

5 个答案:

答案 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?