Android: how to check if a View inside of ScrollView is visible?

android, scrollview, visible

Solution

Use `View#getHitRect` instead of `View#getDrawingRect` on the view you're testing. You can use `View#getDrawingRect` on the `ScrollView` instead of calculating explicitly.

Code from `View#getDrawingRect`:

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

Code from `View#getHitRect`:

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

Problem

I have a `ScrollView` which holds a series of `Views`. I would like to be able to determine if a view is currently visible (if any part of it is currently displayed by the `ScrollView`). I would expect the below code to do this, surprisingly it does not: ``` 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 } ```

Original source