【问题标题】:How do I remove the bouncing effect on appbar?如何消除 appbar 上的弹跳效果?
【发布时间】:2023-03-22 03:10:02
【问题描述】:

Appbar 曾经在投掷时出现问题。滚动不顺畅。

请参考这些:

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

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

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

如何消除这种行为?

【问题讨论】:

    标签: android android-collapsingtoolbarlayout appbar fling


    【解决方案1】:

    只有当AppBar 被滚动/抛出而NestedScrollView(或RecyclerView)尚未完成抛出时才会发生这种情况。

    解决方案: 扩展 AppBar 的默认 Behavior 并在 NestedScroll 尚未停止时触摸 AppBar 时阻止对 AppBar.Behavior 的 onNestedPreScroll() 和 onNestedScroll() 的调用。

     @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

    【讨论】:

    • 给任何读者一个额外的提示,记得在你的 NoBounce 类中添加两个类构造函数,否则它将无法加载新的行为。
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多