RecyclerView+ItemTouchHelper实现拖拽滑动

类似支付宝应用管理界面——RecyclerView+ItemTouchHelper实现拖拽滑动

要实现RecycleView中的拖拽滑动,在以往的经验中经常要依赖GestureDetectors、onInterceptTouchEvent等来实现,然而在RecyclerView上添加拖动特性有一个非常简单的方法它就是:ItemTouchHelper。

一、效果图

以下就是通过RecycleView+ItemTouchHelper实现拖拽滑动的效果图,看起来有没有很炫酷。其实实现起来很简单,我们接下来就开始介绍。

二、ItemTouchHelper的介绍

ItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情。它是RecyclerView.ItemDecoration的子类,也就是说它可以轻易的添加到几乎所有的LayoutManager和Adapter中。它还可以和现有的item动画一起工作,提供受类型限制的拖放动画等等。

1.添加依赖

compile ‘com.android.support:recyclerview-v7:25.1.0’
因为要使用RecycleView,同时ItemTouchHelper也是RecycleView中的类。

2.自定义ItemTouchHelper.Callback类

为了使用ItemTouchHelper,你需要实现ItemTouchHelper.Callback接口,通过这个接口,你可以监听“move”和 “swipe”事件,在这里你也可以控制View的选择状态和重写默认动画。

必须实现主要的回调方法:

getMovementFlags(RecyclerView, ViewHolder)
onMove(RecyclerView, ViewHolder, ViewHolder)
onSwiped(ViewHolder, int)
具体解释这三个方法:

public int getMovementFlags(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP| ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.START| ItemTouchHelper.END;
return makeMovementFlags(dragFlags, swipeFlags);
}
ItemTouchHelper允许你判断事件方向。但你必须覆写getMovementFlags()方法去指定支持哪些方向。使用ItemTouchHelper.makeMovementFlags(int, int)创建代表方向的Flag。这里我们同时支持drag和swipe。实现这个方法,ItemTouchHelper可以只能drag而不能swipe(反之亦然),总之根据自己的需求指定。

1
2
onMove(RecyclerView, ViewHolder, ViewHolder)
onSwiped(ViewHolder, int)
当Item移动或者滑动时,会回调这两个方法,然后可以在这两个方法内部设置回调通知更新适配器或者页面显示的数据。

我们还将使用2个帮助方法:

@Override
public boolean isLongPressDragEnabled() {
return true;
}
实现isLongPressDragEnabled()方法返回true去支持长按RecyclerView的item时的drag事件。或者,也可以调用ItemTouchHelper.startDrag(RecyclerView.ViewHolder) 方法来开始一个拖动。

@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
实现isItemViewSwipeEnabled()方法返回true开启触摸视图时的swipe功能。另外ItemTouchHelper.startSwipe(RecyclerView.ViewHolder)也开始swipe事件。

设置给RecycleView:
实现了以上的方法后,就会监听到拖拽和滑动的手势,并会处理相关操作。
接下来需要做的就是把实现的自定义ItemTouchHelper.Callback类设置给RecycleView。

ItemDragHelperCallback callback = new ItemDragHelperCallback(mMineAdapter);
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(mNewsChannelMineRv);
以上就是关于RecycleView+ItemTouchHelper实现拖拽滑动的简单介绍,下面为实现上述效果图,具体讲解其实现过程。

三、RecycleView+ItemTouchHelper实现拖拽的实例应用

1.布局文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值