Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中检查视图是否可见?_Android_User Interface_Visible - Fatal编程技术网

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

如何在Android中检查视图是否可见?,android,user-interface,visible,Android,User Interface,Visible,我在Android上将可见性设置为不可见,如下所示: myImageView.setVisibility(View.INVISIBLE); 然后使其可见: myImageView.setVisibility(View.VISIBLE); 现在我不知道myImageView是否可见,我如何才能这样检查它: if (myImageView IS VISIBLE) { Do something } else { Do something else } 我该怎么做?我必须在括号内写

我在Android上将可见性设置为不可见,如下所示:

myImageView.setVisibility(View.INVISIBLE);
然后使其可见:

myImageView.setVisibility(View.VISIBLE);
现在我不知道
myImageView
是否可见,我如何才能这样检查它:

if (myImageView IS VISIBLE) {
    Do something
} else {
    Do something else
}

我该怎么做?我必须在括号内写些什么

您应该使用相应的方法。前缀为“get”和“set”的方法名是Java表示属性的惯例。有些语言具有实际的属性语言结构,但Java不是其中之一。因此,当您看到标记为“setX”的内容时,您可以99%确定有一个相应的“getX”将告诉您该值。

尽管View.getVisibility()确实获得了可见性,但它不是简单的真/假。视图的可见性可以设置为以下三项之一

查看。可见 视图是可见的

查看。不可见 视图不可见,但仍将使用它通常占用的任何间距。它的“隐形”

查看。已消失 景色消失了,你看不见它,它也没有占据“位置”

因此,要回答您的问题,您需要:

if (myImageView.getVisibility() == View.VISIBLE) {
    // Its visible
} else {
    // Either gone or invisible
}

或者你可以简单地使用

View.isShown()

如果图像是布局的一部分,它可能是“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
}

你能解释一下为什么这样做吗?我已经看过View.getLocalVisibleRect的源代码,我不确定它是如何工作的。1) getHitRect(scrollBounds)在其父坐标中获取命中矩形,并在scrollBounds中填充它们;2)使用scrollBounds为ImageView的View.getLocalVisibleRect(scrollBounds)种子。如果ImageView位于scrollBounds的边界内,则该方法返回true。注意:格式化下面的注释时遇到问题。道歉。对,我的错是没有具体说明。确切的混淆点是
imageView.getLocalVisibleRect(scrollBounds)
调用。从GRPCODE:<代码>公共最终布尔GETLoalVistiBeLeCeReT(Rect R){点偏移=新Posits();如果(GETGULALVISIVILILDECT(R,Office)){R.Office(-Office .x,-Office .y);//使R局部返回true;}返回false;}不考虑ScLabVIEW填充!这(getLocalVisibleRect)看起来很有希望,但是我们可以只使用getGlobalVisibleRect()吗?若否,原因为何?谢谢。这更准确,因为它检查视图是否在显示列表上,因为视图可能“可见”,但没有父视图。如果视图不在可见屏幕的范围内,则可能为真,因此并非所有情况下都是准确的。然而,答案始终有效。View#isShown()遍历父视图的所有可见性,以验证它是否显示在屏幕上。这个过程有时会很昂贵。我认为这应该是可以接受的答案。它可以在不在可见屏幕范围内的情况下可见,所以在所有情况下都不准确。然而,答案一直在起作用。ForceMagic是正确的,我发布答案的原因也是正确的。可以将视图设置为View.VISIBLE,并且您的if逻辑将返回true,但是,用户可能实际上看不到该视图。下面我的解决方案将在且仅当用户能够在屏幕的视图端口上看到视图的任何部分时返回true。@BillMote我的解决方案是解决原始问题。如何获得可见性属性的值。@William谢谢您,Sir简短而简单,回答得很好。