我有一个ScrollView包含一系列Views. 我希望能够确定一个视图当前是否可见(如果它的任何部分当前由 显示ScrollView)。我希望下面的代码可以做到这一点,令人惊讶的是它没有:
ScrollView
Views
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您可以使用View#getDrawingRecton ScrollView 而不是显式计算。
View#getHitRect
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); }