如何识别Horizo​​ntalScrollview子项是否完全可见

时间:2015-04-20 04:07:38

标签: android horizontalscrollview

我在HorizontalScrollView中有一些按钮我想在HorizontalScrollView的两端显示导航箭头。如果0索引处的子项完全可见,则当用户从左向右滚动并且0索引处的子项不可见时,左箭头应该是不可见的,然后再次显示左箭头相同的逻辑适用于右侧箭头。

我试过下面的代码:

private boolean isViewVisible(HorizontalScrollView hs, View view) {
        Rect scrollBounds = new Rect();
        hs.getHitRect(scrollBounds);
        if (!view.getLocalVisibleRect(scrollBounds)
            || scrollBounds.height() < view.getHeight()) {
            return false;
        } else {
            return true;
        }
    }

它工作正常,如果可见单个像素视图或部分视图,则返回true。

然后我在下面的代码中尝试了FULLY可见,但它适用于ScrollView而不适用于HorizontalScrollView

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

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

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

我想更改HorizontalScrollView的上述代码。 感谢

1 个答案:

答案 0 :(得分:0)

这个问题来自几个月前,所以我假设你找到了答案,但也许会帮助别人。

这对我有用:

private boolean isViewVisible(View view) {
    Rect scrollBounds = new Rect();
    yourHorizontalScrollView.getDrawingRect(scrollBounds);
    int rightEdge = view.getRight();
    int leftEdge = rightEdge - view.getWidth();
    int width = view.getWidth();
    if ((scrollBounds.right > (rightEdge + width) && scrollBounds.left < leftEdge)) {
        return true;
    } else {
        return false;
    }
}