我有一张ScrollView,里面有一系列的Views.我希望能够确定视图当前是否可见(如果它的任何部分当前由ScrollView显示).我希望下面的代码能做到这一点,但令人惊讶的是,它没有做到这一点:

Rect bounds = new Rect();
view.getDrawingRect(bounds);

Rect scrollBounds = new Rect(scroll.getScrollX(), scroll.getScrollY(), 
        scroll.getScrollX() + scroll.getWidth(), scroll.getScrollY() + scroll.getHeight());

if(Rect.intersects(scrollBounds, bounds))
{
    //is  visible
}

推荐答案

在您正在测试的视图上使用View#getHitRect而不是View#getDrawingRect.您可以在103上使用View#getDrawingRect,而不是显式计算.

View#getDrawingRect码:

 public void getDrawingRect(Rect outRect) {
        outRect.left = mScrollX;
        outRect.top = mScrollY;
        outRect.right = mScrollX + (mRight - mLeft);
        outRect.bottom = mScrollY + (mBottom - mTop);
 }

View#getHitRect码:

public void getHitRect(Rect outRect) {
        outRect.set(mLeft, mTop, mRight, mBottom);
}

Android相关问答推荐

Android模拟器:无法安装ShellCommandUnresponsiveResponse和UtpResponse异常

Android使用参数编写齐射后请求

有没有办法知道每台安卓设备上的通知限制?

Jetpack Compose:如何将浮动操作按钮上方的子按钮居中对齐?

如何阻止Gradle在编译时生成app-metadata.properties

如何在停止和销毁时更改函数中Firebase实时数据库的子项的值我试过了,但这不起作用.请使用Kotlin

没有打开历史记录的活动意向 Select 器完成调用活动

android回收器查看点击事件无响应

使用 List 和 LazyColumn 重新组合所有项目

可组合函数无限地从视图模型获取值

在本地通知中设置自定义声音

是否可以在 Android 应用程序的 Wifi 设置中为 DNS 服务器设置自定义 IP?

为一组闪烁的可组合项制作动画,控制同步/定时

如何在 android compose 中将具有渐变边缘的透明圆圈绘制到阴影覆盖层中?

浏览器未命中断点判断 USB 连接设备

CoroutineScope 与挂起函数

为什么我在 Jetpack Compose 中被警告可选修饰符参数应该具有默认值修饰符?

如何在 Jetpack Compose 中擦除画布时变得透明,现在我得到白色?

基线配置文件 x R8/Proguard

如何在stroke android drawable中设置渐变