如何检查Android中的视图是否可见?

Mar*_*tin 168 user-interface android visible

visibility在Android上设置为隐形:

myImageView.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)

然后让它可见:

myImageView.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)

现在我不知道是否myImageView可见,我该如何检查:

if (myImageView IS VISIBLE) {
    Do something
} else {
    Do something else
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我必须在括号内写什么?

Wil*_*iam 456

虽然View.getVisibility()确实获得了可见性,但它不是简单的true/false.视图可以将其可见性设置为三种情况之一.

View.VISIBLE 视图可见.

View.INVISIBLE 视图不可见,但仍将使用它通常占用的任何间距.它的"隐形"

View.GONE 视图消失了,你无法看到它并且它没有占据"点".

所以要回答你的问题,你正在寻找:

if (myImageView.getVisibility() == View.VISIBLE) {
    // Its visible
} else {
    // Either gone or invisible
}
Run Code Online (Sandbox Code Playgroud)

  • 当它不在可见屏幕的范围内时可以是可见的,因此在所有情况下都不准确.但是,[Bill Mote的](http://stackoverflow.com/a/12428208/62921)答案一直在运作. (3认同)

dev*_*ato 116

或者你可以简单地使用

View.isShown()
Run Code Online (Sandbox Code Playgroud)

  • 这更准确,因为它检查视图是否在displaylist上,因为视图可能是"可见的"但没有父视图. (4认同)
  • 当它不在可见屏幕的范围内时可以是真的,因此在所有情况下都不准确.但是,[Bill Mote的](http://stackoverflow.com/a/12428208/62921)答案一直在运作. (2认同)

Bil*_*ote 53

如果图像是布局的一部分,它可能是"View.VISIBLE",但这并不意味着它在可见屏幕的范围内.如果这就是你所追求的; 这将工作:

Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (imageView.getLocalVisibleRect(scrollBounds)) {
    // imageView is within the visible window
} else {
    // imageView is not within the visible window
}
Run Code Online (Sandbox Code Playgroud)