美文网首页recyclerView自定义view八阿哥lalala
RecyclerView仿ios左滑删除的轻量级实现

RecyclerView仿ios左滑删除的轻量级实现

作者: 夜宿金陵渚 | 来源:发表于2017-02-20 18:00 被阅读4544次

           项目中碰到RecyclerView左滑删除的需求,网上找了一圈,感觉都不太合适。大部分都往大而全的方向走,提供的库都比较大,而且都重写了RecyclerView、需要继承特定的adapter等等之类的问题,使用起来稍显麻烦。有些使用简单,但是达不到理想的效果,例如与下拉刷新或者RecyclerView自身存在一些滑动冲突,不能像QQ或者网易邮箱那样一次只能滑开一个item。所以,只能自己写了。

    效果图如下:

           效果上,具体效果参考了QQ和网易邮箱,比较以后,还是认为QQ的好点,实现部分以QQ效果为参照。支持多点触控,就像QQ一样一次只有一个item被滑开。使用上,不需要重写RecyclerView,不需要继承特定的adapter,总之简简单单,一个类文件一行代码即可。与SwipeRefreshLayout无冲突,测试过没发现滑动方面的问题。

          项目地址https://github.com/fornana/swipeitemlayout,使用只需要两步:

    1、SwipeItemLayout拷贝到项目里

    2、调用addOnItemTouchListener(new SwipeItemLayout.OnSwipeItemTouchListener(this))

           至于item布局方面,与DrawerLayout一样的做法。以SwipeItemLayout为root view,然后添加一个group,作为主要内容,再添加第二个group,作为菜单按钮部分。点击事件、长按事件以及view的点击效果等,将item中的children当做一个普通的view来对待就可以了。直接setOnClickListener、setOnLongClickListener,点击效果用drawable设置background即可。

    相关文章

      网友评论

      • Zane_Samuel:main item不能为空 是怎么回事
      • Kiwi_Berry:请问楼主,有些menu按钮,侧滑之后,item有滑动相应距离,但是那个按钮显示不出来是怎么回事?
      • 小李杂记:报 缺少layout参数 ,麻烦看下是什么原因啊
      • 娃娃要从孩子抓起:谁都不服,就服你的命名规范:+1:
      • 今天_a240:点击左滑出来的按钮 怎嘛 让它 还原到原来的位置啊
      • 幸福mg元素:lz,左滑的子view点击事件无效呀
      • 崔鹏宇:老哥,实现的思路可否讲解一下。
      • 以帅服人的珂哥:哎呦大哥 撞头像了
      • 连城_25ae:您好!想问下 您这个还能支撑右滑么?
        GoogleCrypto:@连城_25ae 其实这个库就挺好的 https://github.com/yanzhenjie/SwipeRecyclerView
        连城_25ae:@universe_3772 没有 我直接让产品改需求了 :smile:
        GoogleCrypto:你的右滑实现了吗?
      • Harry_黄琦:您好 ,有个问题需要item里有个按钮点击一下 就滑出菜单 ,请问这个能实现吗
        Harry_黄琦:找到了 调用SwipeItemLayout的trackMotionScroll()即可,但是是一下子弹出来的 有点突兀
      • 同舟共济_629f:你好,有没有某个item禁止左滑的方法
      • a62b23111747:很不错, 就是作者能不能讲讲实现思路 我们不仅要知其然,更要知其所以然
        坏蛋222:@毅_f5db 没毛病,说下实现思路
      • c250f750f4d3:现在有个问题,如果我在SwipeItemLayout外放了一个textview,就不能滑动了
        16f118ffa043:改下源码 ,onInterceptTouchEvent 的 down事件 下
        if (pointView == null) {
        //可能是head view或bottom view
        pointOther = true;
        } else if (pointView instanceof SwipeItemLayout) {
        pointItem = (SwipeItemLayout) pointView;
        } else if (pointView instanceof ViewGroup) {
        ViewGroup viewGroup = (ViewGroup) pointView;
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
        View view = viewGroup.getChildAt(i);
        if (view != null && view instanceof SwipeItemLayout) {
        pointItem = (SwipeItemLayout) view;
        break;
        }
        }
        if (pointItem == null) {
        pointOther = true;
        }
        } else {
        pointOther = true;
        }
        改成这样子即可
      • 挨踢星:学习了,这些楼主。🚚🚚🚚🚚🚚
      • abbb38f69998:很给力!:+1:
      • 易水枫岚:你好,有个问题想问下,如果布局的高度设置wrap_content,这样布局就没法显示了,高度没法定死
        da7b157cbfbd: @易水
        易水枫岚:@夜宿金陵渚 非常感谢,看得出来,是一个很负责用心的作者
        夜宿金陵渚:修改了onMeasure(),可以支持了

      本文标题:RecyclerView仿ios左滑删除的轻量级实现

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