美文网首页Android技术知识安卓开发博客Android开发
轻松集成微信QQ列表Item侧滑布局及删除确认效果

轻松集成微信QQ列表Item侧滑布局及删除确认效果

作者: Jepack | 来源:发表于2018-07-16 16:33 被阅读82次

    前言

    RecyclerView的Item删除功能是一个十分常见的功能。这不我的项目中也有了这种需求!为避免重复造轮子,第一件事就是GitHub搜索SwipeLayout,本文是在 https://github.com/fornana/swipeitemlayout 的基础上实现的。

    做了哪些事情

    fornana的swipeitemlayout已经实现了侧滑显示更多按钮的功能,我对其做了以下修改:

    • 修改列表Item的点击事件处理;
    • 增加Item删除确认功能;

    分析开源代码增加点击事件

    swipeitemlayout是单一的功能实现类,分析源码的策略是先应用到项目中测试,在遇到问题时分析源码解决(对于一个复杂的开源实现分析时其实有一些小技巧,在后续文章中会进行介绍)。
    将swipeitemlayout应用到项目中的列表中,侧滑功能未发现问题。但在点击item时不能触发点击事件,我们分析源码看看如何解决这个问题:

    • 方法onInterceptTouchEvent


      触摸拦截判断
    • 方法onTouchEvent


      触摸事件

    从截图中看出布局View的触摸事件被重写了,但没有实现点击功能。我们要做的就是添加点击功能,可能的实现方式包括:

    1. 通过逻辑在重写的Touch方法中区分是处于可单击状态(侧滑没有打开,且发生短时间按下和松开)
    2. 直接给mMainView(参见下图代码,实际就是我们每个展示的Item内容布局)添加点击事件,当触摸事件不被阻拦时触发mMainView的点击事件


      子view

    明显方法二要在逻辑上要简单一点,缺点是我们要每次要外部获取到这个mMainView然后添加点击事件,对于实际作为Recyclerview的item时,是不是可以直接设置ItemView的点击事件就可以,有简化的方法呢?其实在mMainView点击时调用SwipeItemLayout的点击事件就很容易解决这个问题:


    点击

    分析源码增加删除确认功能

    该功能需要注意两点:

    1. 点击侧滑菜单删除按钮时滑动显示确认提示
    2. 点击非提示部分及滑动隐藏侧滑菜单时关闭提示

    要增加删除确认功能,首先要添加一个默认隐藏的确认View:
    *首先在 ids.xml 增加id,方便外部集成


    增加提示id
    • 在侧滑布局类中获取确认View:


      获取提示View
    • 接下来实现第一点功能,很简单,增加一个显示确认提示的动画的公开方法即可:


      显示提示
    • 第二点需要在分析在什么源码,确定哪些情况会关闭侧滑菜单。具体操作后确定三种情况

      • 触摸非当前显示的Item位置
      • 点击当前Item的非侧滑菜单位置
      • 缓慢或快速滑动当前Item关闭侧滑菜单

    前两个可以视为一种情况,都是一次性关闭,第二种是根据触摸位置关闭。这里不再详细分析如何找到对应位置,不是很难找。直接上代码:


    直接关闭 滑动关闭

    效果图

    侧滑菜单 删确认

    集成

    将你的Item布局改成如下图,包含你当前Item布局和菜单(通常是LinearLayout)


    image.png

    然后添加点击时showTip()和Item点击事件即可

    此代码将增加到Github仓库中, 欢迎指正!

    相关文章

      网友评论

        本文标题:轻松集成微信QQ列表Item侧滑布局及删除确认效果

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