两个recycleView item 拖拽item 动画
时间: 2024-05-11 19:20:21 浏览: 5
要实现两个RecyclerView item之间的拖拽动画,可以使用ItemTouchHelper类。以下是基本步骤:
1. 创建一个实现ItemTouchHelper.Callback的类,重写以下方法:
- onMove():当用户拖动item时,返回true,同时交换item的位置。
- onSwiped():当用户滑动item时,执行删除或其他操作。
- getMovementFlags():设置拖拽和滑动的方向。
2. 在RecyclerView的Adapter中实现ItemTouchHelperAdapter接口,重写以下方法:
- onItemMove():当item被移动时,将item的位置交换。
- onItemDismiss():当item被删除时,执行删除操作。
3. 在Activity或Fragment中创建ItemTouchHelper实例,并将其附加到RecyclerView上。
4. 在Adapter中实现动画效果,可以使用ItemAnimator类。例如,使用DefaultItemAnimator类实现默认的动画效果。
以下是示例代码:
```kotlin
class MyItemTouchHelperCallback(private val adapter: ItemTouchHelperAdapter) :
ItemTouchHelper.Callback() {
override fun getMovementFlags(recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder): Int {
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
return makeMovementFlags(dragFlags, swipeFlags)
}
override fun onMove(recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder): Boolean {
adapter.onItemMove(viewHolder.adapterPosition, target.adapterPosition)
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
adapter.onItemDismiss(viewHolder.adapterPosition)
}
}
interface ItemTouchHelperAdapter {
fun onItemMove(fromPosition: Int, toPosition: Int)
fun onItemDismiss(position: Int)
}
class MyAdapter(private val data: MutableList<String>) :
RecyclerView.Adapter<MyAdapter.ViewHolder>(),
ItemTouchHelperAdapter {
// ...
override fun onItemMove(fromPosition: Int, toPosition: Int) {
// 交换item
Collections.swap(data, fromPosition, toPosition)
notifyItemMoved(fromPosition, toPosition)
}
override fun onItemDismiss(position: Int) {
// 删除item
data.removeAt(position)
notifyItemRemoved(position)
}
// ...
}
// 在Activity或Fragment中
val callback = MyItemTouchHelperCallback(adapter)
val touchHelper = ItemTouchHelper(callback)
touchHelper.attachToRecyclerView(recyclerView)
```