美文网首页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()即可,但是是一下子弹出来的 有点突兀
  • 2caf57f6e58d:你好,有没有某个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