vid*_*ida 6

这只发生在AppBar滚动/抛出而NestedScrollView(或RecyclerView) 尚未完成抛出时。

解决方案:扩展 AppBar 的默认设置BehavioronNestedPreScroll()onNestedScroll()AppBarNestedScroll 尚未停止时阻止对 AppBar.Behavior 的调用和何时被触摸。

 @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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在布局上使用它:

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    ...
    app:layout_behavior="com.mypackage.NoBounceBehavior"/>
Run Code Online (Sandbox Code Playgroud)

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

  • 给任何读者一个额外的注意,记得在你的 NoBounce 类中添加两个类构造函数,否则它将无法加载新行为。 (3认同)