RecyclerView(四)--ItemTounchHelper滑动

528 阅读2分钟

「这是我参与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不为空的时候开始,空的时候结束