在ScrollView中使用onOverScrolled

3

你如何在 ScrollView 中精确使用 onOverScrolled

protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)
clampedXclampedY布尔值告诉我是否发生了超出滚动范围的情况,但滚动值并未说明超出滚动量(它们始终为0或最大滚动量)。它们的意义是什么?
此外,它一直被调用。我原以为只有在其中一个夹紧值为true时才会调用它。
1个回答

8

我已经对ScrollView进行了子类化,以提供更有用的onOverScrolled功能。代码如下:

public interface OnOverScrolledListener {
    void onOverScrolled(android.widget.ScrollView scrollView, 
                         int deltaX, int deltaY, boolean clampedX, boolean clampedY);
}

private OnOverScrolledListener mOnOverScrolledListener;

private int mOverScrollByDeltaX;
private int mOverScrollByDeltaY;    

@Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
    this.mOverScrollByDeltaX = deltaX;
    this.mOverScrollByDeltaY = deltaY;
    final boolean result = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
    return result;
};

@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
    if (mOnOverScrolledListener != null && (clampedX || clampedY)) {
        mOnOverScrolledListener.onOverScrolled(this, mOverScrollByDeltaX, mOverScrollByDeltaY, clampedX, clampedY);
    }
}

public OnOverScrolledListener getOnOverScrolledListener() {
    return mOnOverScrolledListener;
}

public void setOnOverScrolledListener(OnOverScrolledListener onOverScrolledListener) {
    this.mOnOverScrolledListener = onOverScrolledListener;
}

谢谢来自未来十年的祝福。很奇怪,居然还没有现成的方法可以做到这一点。 - Cloudy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接