overScrollBy 并不总是在 Lollipop (5.x) 平台上反弹

overScrollBy doesn't always bounce back in Lollipop (5.x) platform

我已经根据以下 post 覆盖了 ScrollView 中的 overScrollBy 方法:

http://jasonfry.co.uk/blog/android-overscroll-revisited/

它在其他平台版本上工作正常,但如果对 ScrollView 应用投掷动作,Lollipop 无法弹回。

有人遇到过这个问题并找到了解决方法吗?

在构造函数中调用setOverScrollMode(OVER_SCROLL_ALWAYS);

这里是我在自定义中覆盖的相关代码 ScrollViewclass:

@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX,
                               int scrollY, int scrollRangeX, int scrollRangeY,
                               int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
    return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,
            scrollRangeX, scrollRangeY, maxOverScrollX, OVER_SCROLL_AMOUNT,
            isTouchEvent);
}

谢谢。

我深入研究了 KitKat 和 Lollipop 之间的变化 ScrollView。以下代码解决了我的问题。

@TargetApi(21)
@Override
public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) {
    // Not consumed means it wasn't handled because ScrollView
    // doesn't take over scrolling bounds into scroll range,
    // so we fling it ourselves to get it bounce back
    if (getOverScrollMode() == OVER_SCROLL_ALWAYS && !consumed) {
        fling((int) velocityY);

        return true;
    } else {
        return super.dispatchNestedFling(velocityX, velocityY, consumed);
    }
}