仿任务面板 跨多个RecyclerView的Item拖动 支持缩小后拖动


640?wx_fmt=other 点击关注了解更多精彩内容!!


640?wx_fmt=png

魏子翔,2017年加入去哪儿网技术团队,目前在平台事业部/大前端技术中心,主要负责Android平台的基础框架和跨端混合应用方向研发。关注前沿技术,热爱分享,拥抱开源。


相信看完优雅的实现多类型 RecyclerView Adapter 这篇文章后,大家对本库基本用法已经有了初步认识,本文主要讲解跨 RecyclerView 的 Item 拖动,并支持缩放的功能,主要是防办公软件的面板,本功能的实现大量参考了系统的 ItemTouchHelper 的源码。 Github地址:MultiItem。

效果截图

640?wx_fmt=gif

640?wx_fmt=gif

用法

拖动功能

拖动功能使用比较简单,拖动功能相关流程和控制都会回调到 ItemDragListener 监听中。 实例化拖动辅助类,设置监听,并在DispatchTouchEvent 中调用 DragHelper. onTouch(ev) 方法。

 
 
  1. @Override

  2. protected void onCreate(Bundle savedInstanceState) {

  3.    ...

  4.    //ItemDragHelper,需要传入外层的横向滚动的RecyclerView

  5.    dragHelper = new ItemDragHelper(horizontalRecycler);

  6.    //为dragHelper设置拖动监听,基本都有默认实现,可根据具体业务继承重写方法

  7.    dragHelper.setOnItemDragListener(new OnBaseDragListener());

  8. }

  9. @Override

  10. public boolean dispatchTouchEvent(MotionEvent ev) {

  11.    //需要保证在Activity或者外层的ViewGroup中重写此方法

  12.    //调用dragHelper.onTouch():true消耗掉事件;false则执行super

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现两个RecyclerView之间的item互相拖拽可以通过以下步骤进行: 1. 首先,在布局文件中分别添加两个RecyclerView控件。给它们分别设置不同的ID,方便后续代码操作。 2. 在代码中分别找到两个RecyclerView实例,并为它们设置LayoutManager和Adapter。确保两个RecyclerView显示的数据不同。 3. 为每个RecyclerViewItem添加拖拽功能,可以使用ItemTouchHelper类来实现。创建一个ItemTouchHelper实例,并将其附加到两个RecyclerView上。 4. 实现ItemTouchHelper.Callback类,重写以下几个方法: - getMovementFlags:指定拖拽和滑动的方向,可以使用ItemTouchHelper.UP、ItemTouchHelper.DOWN、ItemTouchHelper.LEFT、ItemTouchHelper.RIGHT等常量。 - onMove:处理拖拽事件,通过交换两个Item的位置实现互相拖拽。 - onSwiped:处理滑动事件,可以在这个方法中实现删除Item的操作。 5. 在RecyclerView的Adapter中对Item的触摸事件进行监听,当用户按下item时,调用startDrag方法来开始拖拽。 6. 当拖拽结束时,将交换过位置的数据更新到对应的数据源中,并刷新RecyclerView。 通过以上步骤,就可以实现两个RecyclerView之间的item互相拖拽了。可以在同一个Activity或Fragment中同时显示这两个RecyclerView,或者在不同的页面中分别显示这两个RecyclerView。这样用户就可以通过拖拽的方式,将一个RecyclerViewitem拖放到另一个RecyclerView中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值