【Android 事件分发】ItemTouchHelper 实现侧滑删除(一)

简介: 【Android 事件分发】ItemTouchHelper 实现侧滑删除(一)

文章目录

Android 事件分发 系列文章目录

一、ItemTouchHelper.Callback 配置侧滑删除

1、设置移动标志 ( 拖动/滑动 )

2、启用滑动动作

3、滑动距离判定设置

4、滑动速度判定设置

5、设置动画时间

6、设置侧滑删除触发操作

7、RecyclerView.Adapter 适配器中的删除操作

三、完整代码实现

1、主界面

2、ItemTouchHelper.Callback 回调类

3、执行效果





一、ItemTouchHelper.Callback 配置侧滑删除



1、设置移动标志 ( 拖动/滑动 )


重写 ItemTouchHelper.Callback 的 getMovementFlags 方法 , 在该方法中设置滑动/拖动标志位 ;


滑动 / 拖动 标志 , 可使用 ItemTouchHelper.UP , ItemTouchHelper.DOWN , ItemTouchHelper.LEFT , ItemTouchHelper.RIGHT , 进行或操作得到 ;


   

// 设置拖动方向, 此处设置上下拖动事件
        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        // 设置滑动方向, 此处设置左右侧滑事件
        int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;


再将 拖动标志 和 滑动标志 传入 makeMovementFlags 方法 , 得到一个移动标志位 , 作为 getMovementFlags 方法的返回值 ;


makeMovementFlags(dragFlags, swipeFlags);



public class Callback extends ItemTouchHelper.Callback {

 

/**
     * 设置上下左右动作
     * 只有在此处打开了指定方向的设置 , 才可以应用具体方向的拖动
     * @param recyclerView
     * @param viewHolder
     * @return
     */
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView,
                                @NonNull RecyclerView.ViewHolder viewHolder) {
        // 设置拖动方向, 此处设置上下拖动事件
        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        // 设置滑动方向, 此处设置左右侧滑事件
        int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
        // 应用 拖动 和 滑动 设置
        return makeMovementFlags(dragFlags, swipeFlags);
    }
}



2、启用滑动动作


重写 ItemTouchHelper.Callback 的 isItemViewSwipeEnabled 方法 , 将该方法返回值设置为 true , 启用滑动操作 ;


public class Callback extends ItemTouchHelper.Callback {
    /**
     * 是否启用滑动操作
     * @return 是否启用 true 启用, false 不启用
     */
    @Override
    public boolean isItemViewSwipeEnabled() {
        return true;
    }
}



3、滑动距离判定设置


重写 ItemTouchHelper.Callback 的 getSwipeThreshold 方法 , 设置用户的滑动距离 , 设置的是比例值, 返回值为 0.5 , 就意味着滑动宽度/高度的一半, 才触发侧滑 onSwiped 方法 ;


public class Callback extends ItemTouchHelper.Callback {
    /**
     * 用户滑动距离, 设置的是比例值, 返回值为 0.5 , 就意味着滑动宽度/高度的一半, 才触发侧滑 onSwiped 方法
     * @param viewHolder
     * @return
     */
    @Override
    public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) {
        return 0.5f;
    }
}



上面案例中设置的滑动幅度是 0.5f , 在 getMovementFlags 方法中设置的滑动方向是左右滑动 , 因此在该案例中 , 滑动幅度在水平方向上超过 0.5 倍的条目组件宽度 , 侧滑删除才能生效 ;


下面的操作中 , 滑动在水平方向上没有超过组件宽度的 0.5 倍 , 滑动删除不生效 ;

image.png



下面的操作中 , 水平方向的滑动幅度超过了 0.5 倍 , 侧滑删除生效 ;

image.png



侧滑判定 : 这里有两种侧滑判定条件 , 满足任意一个即可触发侧滑删除 ;

① 条件一 : getSwipeThreshold 方法中设置的滑动距离 , 滑动超过 0.5 滑动幅度 , 触发侧滑删除 ;

② 条件二 : getSwipeEscapeVelocity 方法中设置的滑动速度 , 水平方向上每秒超过 5 像素的速度 , 触发侧滑删除 ;


目录
相关文章
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
2月前
|
Android开发
Android自带的DrawerLayout和ActionBarDrawerToggle实现侧滑效果
Android自带的DrawerLayout和ActionBarDrawerToggle实现侧滑效果
10 0
|
5月前
|
XML Java Android开发
Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)
Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)
72 0
|
9月前
|
XML Android开发 数据格式
Android 了解View的事件分发详解
Android 了解View的事件分发详解
55 0
|
10月前
|
前端开发 API Android开发
Android侧滑踩坑记(仿IOS侧滑finish页面基于Slidr库)
Android侧滑踩坑记(仿IOS侧滑finish页面基于Slidr库)
183 0
|
Android开发 容器
Android实现面包屑效果,支持Fragment联动
Android实现面包屑效果,支持Fragment联动
|
Android开发
Android实现连线题效果
Android实现连线题效果
|
Android开发
Android实现调用系统相机录像及实现录音
Android实现调用系统相机录像及实现录音
591 0
|
移动开发 JavaScript Android开发
通过howler.js实现在Android下的微信浏览器自动播放音频
通过howler.js实现在Android下的微信浏览器自动播放音频
414 0
通过howler.js实现在Android下的微信浏览器自动播放音频
|
存储 Dart Java
【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用
【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用