博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(有图)仿QQ侧滑菜单:RecyclerView侧滑菜单,长按拖拽,滑动删除
阅读量:6229 次
发布时间:2019-06-21

本文共 3757 字,大约阅读时间需要 12 分钟。

RecyclerView的出现不可否认是开发者们的福利,它自带的ItemTouchHelper能非常轻松的完成侧滑删除、长按拖拽,但是难免有的开发者不会使。再加上实际的开发中侧滑删除往往会用侧滑菜单来实现,这就难为了有些开发者了。SwipeRecyclerView的出现就完美的解决了这些问题,侧滑删除、长按拖拽Item仅需要一句话…

  1. 需要说明的是,本库没有对RecyclerView做大的修改,只是ItemView的封装。看起来是对RecyclerView的修改,其实仅仅是为RecyclerView添加了使用的方法API而已。
  2. 应开发者们的要求,本库已经更新了三个版本了,会一直维护下去,根据小伙伴的要求,以后也会添加一些其它功能。

因为SwipeRecyclerView发布已经一个月了,现在有了几个不小的更新,都是刚需,所以再次分享出来给大家,希望大家能多多支持。

SwipeRecyclerView将完美解决这些问题:

  1. 以下功能全部支持:竖向ListView、横向ListView、Grid、StaggeredGrid四种形式。
  2. RecyclerView 左右两侧 侧滑菜单。
  3. 菜单可以自适应Item不同高度。
  4. 某一个Item显示的不同的菜单(类似QQ)。
  5. 菜单横向排布、菜单竖向排布(看下图)。
  6. RecyclerView长按拖拽Item。
  7. RecyclerView侧滑删除item。
  8. 指定RecyclerView的某一个Item不能滑动删除或长按拖拽。
  9. 用SwipeMenuLayout在任何地方都可以实现你自己的侧滑菜单。
  10. 使用SwipeRecyclerView下拉刷新、自动加载更多。
  11. 可以和ViewPager嵌套使用(兼容滑动冲突)。

SwipeRecyclerView的源码托管在Github:,欢迎Star。

如果你是手机看本文,记不住项目地址不要紧,记住我的个人主页就好,我的所有项目在我网站都有。

我的域名是:yanzhenjie.com,也就是我名字严振杰.com,我相信你肯定记住了,没记住的再看一眼啦。

要是还没记住,更简单的是百度/Google搜索我名字:严振杰,排名第一的就是我。

效果图

gif有一些失真,且网页加载速度慢,可以[下载demo的apk][3]看效果。

侧滑菜单

  1. 左右两侧都有菜单,主动调出第几个菜单或者手指滑动出现。
  2. 根据ViewType某一个Item显示的不同的菜单(类似QQ)

和ViewPager嵌套 下拉刷新、自动加载更多

  1. 和ViewPager嵌套使用,兼容了滑动冲突。
  2. 可以和任何下拉刷新的框架结合,滑动到底部自动加载更多。

长按拖拽 侧滑菜单结合使用

  1. 一直按住Item进行拖拽排序,支持List、Grid形式。
  2. 长按拖拽并且和侧滑菜单结合使用。

直接滑动删除 长按拖拽Item排序

  1. 侧滑直接删除,也可以长按拖拽排序。
  2. 可以指定某个Item不能被侧滑删除、不能被长按拖拽。

竖型菜单 用自定义布局实现自己的菜单

  1. 给菜单设置排列方向,支持横向、竖向。
  2. 开发者用库中的SwipeMenuLayout开发自己的侧滑菜单。

引用方法

  • Eclipse 请自行。
  • AndroidStudio使用Gradle构建添加依赖(推荐)
    compile 'com.yanzhenjie:recyclerview-swipe:1.0.2'复制代码

Or Maven:

com.yanzhenjie
recyclerview-swipe
1.0.2
pom
复制代码

使用介绍

这里列出关键实现,具体请参考demo,或者加最上面的交流群一起讨论。 更多教程请进入查看。

启用SwipeReyclerView的长按Item拖拽功能和侧滑删除功能

recyclerView.setLongPressDragEnabled(true);// 开启长按拖拽recyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除。recyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽和侧滑删除,更新UI和数据。复制代码

添加Item侧滑菜单

侧滑菜单支持自动打开某个Item的菜单,并可以指定是左边还是右边的:

// 打开第一个Item的左侧菜单。recyclerView.openLeftMenu(0);// 打开第一个Item的右侧菜单。recyclerView.openRightMenu(0);复制代码
  • 第一步,引用自定义View:SwipeMenuReyclerView:

    复制代码
  • 第二步,设置菜单创建器、菜单点击监听:

    SwipeMenuRecyclerView swipeMenuRecyclerView = findViewById(R.id.recycler_view);// 设置菜单创建器。swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);// 设置菜单Item点击监听。swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);复制代码
  • 第三步,菜单创建器创建菜单:

    /*** 菜单创建器。在Item要创建菜单的时候调用。*/private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {  @Override  public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {      SwipeMenuItem addItem = new SwipeMenuItem(mContext)          .setBackgroundDrawable(R.drawable.selector_green)// 点击的背景。          .setImage(R.mipmap.ic_action_add) // 图标。          .setWidth(size) // 宽度。          .setHeight(size); // 高度。      swipeLeftMenu.addMenuItem(addItem); // 添加一个按钮到左侧菜单。      SwipeMenuItem deleteItem = new SwipeMenuItem(mContext)          .setBackgroundDrawable(R.drawable.selector_red)          .setImage(R.mipmap.ic_action_delete) // 图标。          .setText("删除") // 文字。          .setTextColor(Color.WHITE) // 文字颜色。          .setTextSize(16) // 文字大小。          .setWidth(size)          .setHeight(size);      swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。.      // 上面的菜单哪边不要菜单就不要添加。  }};复制代码

更多使用方法请参考Demo,或者加最上方的QQ群来交流。

  • 第四步,继承SwipeMenuAdapter,和正常的Adapter一样使用:

    public class MenuAdapter extends SwipeMenuAdapter
    { @Override public int getItemCount() { return 0; } @Override public View onCreateContentView(ViewGroup parent, int viewType) { return null; } @Override public ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) { return null; } @Override public void onBindViewHolder(MenuAdapter.DefaultViewHolder holder, int position) { }}复制代码

就到这里,更多的细节,请参考Github上的demo和源码,。

转载地址:http://hsnna.baihongyu.com/

你可能感兴趣的文章
高仿Instagram 页面效果android特效
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
jquery的checkbox,radio,select等方法总结
查看>>