如何去除 appbar 的弹跳效果?

How do I remove the bouncing effect on appbar?

Appbar 曾经在 fling 时出现问题。滚动不流畅。

请参考这些:

但它已在支持库版本 26 中修复。

compile 'com.android.support:design:26.0.0'

但是,即使 fling 不难,appbar 现在也会反弹。

如何消除这种行为?

只有当 AppBar 为 scrolled/flung 而 NestedScrollView(或 RecyclerView)尚未完成投掷时才会发生这种情况。

解决方法:扩展AppBar的默认Behavior,阻塞对AppBar.Behavior的onNestedPreScroll()onNestedScroll()的调用,当AppBar 在 NestedScroll 尚未停止时被触摸。

 @Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
    if (type == TYPE_FLING) {
        isFlinging = true;
    }
    if (!shouldBlockNestedScroll) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
    }
}

@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
    if (!shouldBlockNestedScroll) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
    }
}

然后在布局上使用它:

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    ...
    app:layout_behavior="com.mypackage.NoBounceBehavior"/>

参考 可在此处找到自定义行为的完整代码:https://gist.github.com/ampatron/9d56ea401094f67196f407f82f14551a