【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开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
Android开发
Android 事件分发机制详细解读
Android 事件分发机制详细解读
405 5
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
311 1
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
746 9
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
Android开发
39. 【Android教程】触摸事件分发
39. 【Android教程】触摸事件分发
239 2
|
XML Android开发 数据格式
37. 【Android教程】基于监听的事件处理机制
37. 【Android教程】基于监听的事件处理机制
473 2
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
239 0
|
传感器 Java API
Android Input系统(1) Input事件的产生与传递
Android Input系统(1) Input事件的产生与传递
1837 0

热门文章

最新文章