57

我想检查 aView中的 aScrollView当前是否在 Android 中可见。我没有检查它是否集中在屏幕上,但它当前是否显示在屏幕上。有没有一种方法View可以告诉我视图当前是否可见?

4

6 回答 6

64

这段代码对我有用:

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);
}
于 2018-02-28T20:35:15.520 回答
20
int[] location = new int[2];
view.getLocationOnScreen(location);

或者

Rect rect = new Rect();
view.getGlobalVisibleRect(rect);

现在使用这个位置或矩形来检查它是否在你的可见范围内。如果只是整个屏幕,请检查getResources().getDisplayMetrics().

正如 Antek 在下面的评论中指出的那样,视图可能仍然消失或不可见,这里的返回值告诉了它上次绘制的位置。因此,将上述与边界相关的条件与view.isShown()or结合起来view.getVisibility() == VISIBLE应该注意这一点。

于 2017-01-17T07:04:53.640 回答
2

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)

于 2021-04-01T15:15:52.797 回答
-9

尝试

if(view.isShown()) {
    // Visible
} else { 
    // Invisible
}
于 2016-06-03T07:55:46.810 回答
-20

public boolean checkVisiblity(查看视图){

if(view.isShown()) 返回真;否则返回假;

}

于 2015-05-02T18:07:13.787 回答
-29

函数 View.getVisibility() 可以具有以下值:

  • View.VISIBLE (0):视图可见。

  • View.INVISIBLE (1):视图是不可见的,但它仍然占用空间用于布局。

  • View.GONE (2):视图消失了。完全隐藏,好像没有添加视图

您可以查看以下链接以获取更多信息。 如何检查视图在 Android 中是否可见?

于 2012-12-26T11:31:12.527 回答