「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」
这篇是主要介绍ItemTounchHelper实现滑动功能,对与ItemTounchHelper已经在上篇介绍过了,有不明白的可以看上一篇,我们直接看看ItemTouchHelper.Callback里面关于滑动的方法吧
一、 ItemTouchHelper.Callback对应滑动方法
- getMovementFlags() 首先还是设置滑动标志swipeFlags,有ItemTouchHelper.LEFT 、ItemTouchHelper.UP、ItemTouchHelper.RIGHT、ItemTouchHelper.DOWN四个方向可以设置
public int getMovementFlags(@NonNull @NotNull RecyclerView recyclerView, @NonNull @NotNull RecyclerView.ViewHolder viewHolder) {
int dragFlags=ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags=ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
return makeMovementFlags(dragFlags,swipeFlags);
}
- isItemViewSwipeEnabled()
是否启用滑动,返回值设置为 true , 表示启用滑动操作
public boolean isItemViewSwipeEnabled() {
return true;
}
- getSwipeThreshold() 设置滑动距离(设置的是比例值), 例如返回值为 0.5 , 表示滑动Item的一半, 触发onSwiped()方法
public float getSwipeThreshold(@NonNull @NotNull RecyclerView.ViewHolder viewHolder) {
return 0.5f;
}
- getSwipeEscapeVelocity() 是设置用户的滑动判定速度(单位是每秒移动的像素个数),只有达到这个速度后,才能被判定为滑动
public float getSwipeEscapeVelocity(float defaultValue) {
return 10f;
}
侧滑有两种判断条件,可以防止误操作:
(1) 在getSwipeThreshold()设置滑动距离 (2) 在getSwipeEscapeVelocity()设置滑动速度
- onSwiped() 侧滑判定成功后,就会调用该方法,如果侧滑判定不成功,就不会调用该方法
public void onSwiped(@NonNull @NotNull RecyclerView.ViewHolder viewHolder, int direction) {
mAdapter.deleteItem(viewHolder.getAdapterPosition());
}
上面的方法是关于侧滑的,后面可以看看剩余的方法
- onChildDraw() 整个过程会一直调用这个函数,绘制Item,可以根据actionState的状态来实现一些动画效果(actionState有三种状态:SWIPR(滑动)、IDLE(静止)、DRAG(拖动))
- onChildDrawOver() 当拖动的item位于其他item的时候绘制
- canDropOver() 当前target对应的Item是否允许移动
- getBoundingBoxMargin() 当拖拽的Item跟底下的Item重叠是,可以给拖拽的Item设置一个Margin值
- clearView() Item状态结束的时候调用,我们可以在里面清除动画效果
- getAnimationDuration() 当Item到指定位置后动画持续时间
- onSelectedChanged() 拖拽或者移动的Item改变的时候调用,viewholder不为空的时候开始,空的时候结束