如何检测scrollview的孩子到达屏幕顶部?

时间:2015-10-22 00:15:49

标签: android

我有很多视图的ScrollView,如何在滚动后知道特定视图是否到达屏幕顶部?

我试过这个

mScroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {

            @Override
            public void onScrollChanged() {

                Rect scrollBounds = new Rect();
                mScroll.getHitRect(scrollBounds);

                if (mView.getLocalVisibleRect(scrollBounds) ) {

                    // if layout even a single pixel, is within the visible area do something
                    //Do someThing
                } else {

                    // if layout goes out or scrolled out of the visible area do something
                    // Do some thing
                }

            }
        });

但是此代码会检测视图是否在屏幕之外而不是屏幕顶部

2 个答案:

答案 0 :(得分:0)

使用View.getLocationOnScreen()和/或getLocationInWindow() 与你需要的位置进行比较后。

答案 1 :(得分:0)

您可以创建一个自定义ScrollView的类。在这个类中,重写方法onScrollChanged(int l,int t,int oldl,int oldt);

这是我的垂直ScrollView代码。

private int rangeEndHeight = 20;
private boolean onEnd = false;

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    super.onScrollChanged(l, t, oldl, oldt);
    int length = (int) Math.floor(getContentHeight() * getScale());
    if(getScrollY() >= length - getHeight() - rangeEndHeight) {
        if (!onEnd) {
            onEnd = true;

            // callback here

        }
    }
    else {
        onEnd = false;
    }
}