Android列表拖动ListView~RecyclerView
Posted 亮亮在江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android列表拖动ListView~RecyclerView相关的知识,希望对你有一定的参考价值。
最近有需求要做列表的拖动以及删除和增加业务,经过一番考量给出了效果。
长按频道管理中的条目可以上下滑动,增加或者删除对应的频道。android列表拖动有一个强大的类就可以轻松实现了,就是ItemTouchHelper,可以很好的处理滑动删除逻辑,接下来看一下具体的业务代码。
使用 ItemTouchHelper 和 ItemTouchHelper.Callback
对于Item
的手势操作分为两种:侧滑和拖动,如果需要支持这两种,那么需要给ItemTouchHelper
传入一个ItemTouchHelper.Callback
的子类,并把ItemTouchHelper
和RecyclerView
关联起来,下面,我们先来介绍一下ItemTouchHelper.Callback
个回调方法的含义:
控制相关
public boolean isLongPressDragEnabled()
是否可以通过长按来触发拖动操作,默认返回true
,如果返回false
,那么可以通过startDrag(ViewHolder)
方法来触发某个特定Item
的拖动的机制。public boolean isItemViewSwipeEnabled()
是否可以对每个Item
进行侧滑。public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
返回对于某个ViewHolder
可以移动的方向,可选的值有UP/DOWN/LEFT/RIGHT/START/END
。对于纵向排列的线性布局而言,如果要支持上下拖动排序,那么就要标志位中就要包含UP&DOWN
,而如果需要支持左滑删除,那么标志位中就要包含LEFT
。
结果相关
public abstract boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target)
当某个被拖动的Item
被从旧位置拖动到了新位置后回调,如果返回true
,那么ItemTouchHelper
就认为viewHolder
已经被移动到了target
在Adapter
中的位置。public abstract void onSwiped(ViewHolder viewHolder, int direction)
当某个Item
被滑动到消失时回调,direction
表示滑动的方向。
状态相关
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState)
当Item
的状态发生改变时,回调该方法,actionState
的取值有ACTION_STATE_IDLE/ACTION_STATE_SWIPE/ACTION_STATE_DRAG
。public void clearView(RecyclerView recyclerView, ViewHolder viewHolder)
标志着用户对于某个Item
的操作并且Item
的动画结束,此时我们应该恢复它的状态,以保证它被重新使用的时候能正确地展现。-
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)
Canvas
:绘制RecyclerView
的Canvas
dx, dy
:偏移。actionState
:拖拽还是侧滑,对应ACTION_STATE_DRAG
和ACTION_STATE_SWIPE
。isCurrentlyActive
为true
表示这个Item
正在被用户所控制,false
则表示它仅仅是在回到原本状态的动画过程当中。
-
public void onChildDrawOver(Canvas c, RecyclerView recyclerView, ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)
和上面类似,只不过它是绘制在Item
之上。
最后附上项目的代码,希望对有需要的同学帮助 ,下载没有积分的可私信我发包
代码下载https://download.csdn.net/download/lou_liang/70114507https://download.csdn.net/download/lou_liang/70114507
以上是关于Android列表拖动ListView~RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章
Android列表拖动ListView~RecyclerView
Android列表拖动ListView~RecyclerView