美文网首页
CoordinateLayout 嵌套滑动时抖动解决方案

CoordinateLayout 嵌套滑动时抖动解决方案

作者: 胡洁_ec66 | 来源:发表于2019-04-03 09:27 被阅读0次

在我们使用CoordinateLayout 嵌套AppBarLayout 做滑动时,当在fling过程中会出现抖动情况,而不是直接惯性流畅的滑动过去。
解决方案
通过重写Behavior来实现,具体实现:

public class FixBehavior extends AppBarLayout.Behavior {
    /**
     * 是否处于惯性滑动状态
     */
    private boolean isFlinging = false;
    public FixBehavior() {}

    public FixBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout abl, View target, int type) {
        //如果不是惯性滑动,让他可以执行紧贴操作
        if (!isFlinging) {
            super.onStopNestedScroll(coordinatorLayout, abl, target, type);
        }
    }
    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
        //type==1时处于非惯性滑动
        if (type == 1) {
            isFlinging = false;
        }
    }
    @Override
    public boolean onNestedFling(@NonNull CoordinatorLayout coordinatorLayout, @NonNull AppBarLayout child, @NonNull View target, float velocityX, float velocityY, boolean consumed) {
        //惯性滑动的时候设置为true
        isFlinging = true;
        return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);
    }
}

使用也很简单,在嵌套滑动布局中使用我们自定义的Behavior.

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        app:elevation="0dp"
        app:layout_behavior="对应包名.FixBehavior">

希望可以解决您的问题

相关文章

网友评论

      本文标题:CoordinateLayout 嵌套滑动时抖动解决方案

      本文链接:https://www.haomeiwen.com/subject/xjzobqtx.html