我有一个ScrollView,其中包含一系列Views。我希望能够确定 View 当前是否可见(如果ScrollView当前显示了该 View 的任何部分)。我希望下面的代码可以做到这一点,令人惊讶的是它没有:

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 上使用View#getHitRect而不是View#getDrawingRect。您可以在View#getDrawingRect上使用ScrollView而不是进行显式计算。

来自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:如何检查ScrollView内部的View是否可见?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4628800/

10-10 09:42