onItemMove 动画错乱
时间: 2023-11-30 16:05:04 浏览: 63
在RecyclerView中使用ItemTouchHelper进行拖拽排序时,如果出现动画错乱的情况,可能是因为在onItemMove方法中没有正确地处理视图的变化。
解决这个问题的方法有多种,其中一种是在onItemMove方法中实时更新视图的位置。具体来说,可以在onItemMove方法中获取要移动的item的ViewHolder,然后调用其itemView的setTranslationY方法来更新视图的位置,示例代码如下:
```java
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
// 获取要移动的item的ViewHolder
RecyclerView.ViewHolder viewHolder = mRecyclerView.findViewHolderForAdapterPosition(fromPosition);
if (viewHolder == null) {
return false;
}
// 更新视图的位置
viewHolder.itemView.setTranslationY(toPosition - fromPosition);
// ...
}
```
另外,还可以在onSelectedChanged方法中记录被拖拽的item的ViewHolder,并在onItemClear方法中重置其位置。这种方法需要手动处理动画,示例代码如下:
```java
private RecyclerView.ViewHolder mSelectedViewHolder;
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
mSelectedViewHolder = viewHolder;
}
}
@Override
public void onItemClear(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.onItemClear(recyclerView, viewHolder);
// 重置被拖拽的item的位置
if (mSelectedViewHolder != null) {
mSelectedViewHolder.itemView.animate().translationY(0).start();
mSelectedViewHolder = null;
}
}
```