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);
}
boolean isViewOnScreen(View target)
{
if (!target.isShown())
{
return false;
}
final var actualPosition = new Rect();
final var isGlobalVisible = target.getGlobalVisibleRect(actualPosition);
final var screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
final var screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
final var screen = new Rect(0, 0, screenWidth, screenHeight);
return isGlobalVisible && Rect.intersects(actualPosition, screen);
}
7条答案
按热度按时间b1zrtrql1#
这个代码对我有效:
unhi4e5o2#
或
现在使用这个位置或矩形来检查它是否在你的可见边界内。如果它只是整个屏幕,检查
getResources().getDisplayMetrics()
。正如Antek在下面的注解中指出的那样,视图可能仍然消失或不可见,这里的返回值告诉我们它最后一次绘制的位置。因此,将上述与边界相关的条件与
view.isShown()
或view.getVisibility() == VISIBLE
结合起来应该可以解决这个问题。z5btuh9x3#
zegee29's的答案很有帮助。虽然我想建议也使用
view.getGlobalVisibleRect(actualPosition)
的结果,因为在某些情况下,当item根本不可见时,Rect.intersects()
返回true
,所以结果代码为:或者你可能只是
getGlobalVisibleRect(actualPosition)
的结果7uhlpewt4#
https://stackoverflow.com/a/66907184/2323972之后Диана Ганиева的Java变体
utugiqy65#
尝试
0s0u357o6#
公共布尔checkVisibility(查看视图){
如果(view.isShown())返回真;否则返回false;
}
n3h0vuf27#
函数View.getVisibility()可以具有以下值:
你可以看到下面的链接了解更多信息。我如何检查视图是否在Android中可见?