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

This works:

Rect scrollBounds = new Rect();
if (imageView.getLocalVisibleRect(scrollBounds)) {
    // Any portion of the imageView, even a single pixel, is within the visible window
} else {
    // NONE of the imageView is within the visible window

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; = 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);

If you want to detect that the view is FULLY visible:

private boolean isViewVisible(View view) {
    Rect scrollBounds = new Rect();

    float top = view.getY();
    float bottom = top + view.getHeight();

    if ( < top && scrollBounds.bottom > bottom) {
        return true;
    } else {
        return false;

Leave a Comment