SeniorUI23_ItemTouchHelper实现列表item滑动删除、移动换位及拓展

SeniorUI_高级UI汇总目录

一 ItemTouchHelper

  • android.support.v7.widget.helper.ItemTouchHelper
  • 这是一个用来支持RecyclerView添加滑动消失、拖拽和退出的工具类
  • 和RecyclerView、Callback一起使用;当配置了什么类型,用户执行这些类型的操作时,就会有相应的回调
  • 主要方法:
    Callback#onMove(RecyclerView, ViewHolder, ViewHolder)}
    控制上下滑动
    Callback#onSwiped(ViewHolder, int)} 控制左右滑动
  • ItemTouchHelper可以和任意的LayoutManager一起工作;可以拓展ItemTouchHelper.Callback或者实现ItemTouchHelper.ViewDropHandler
  • 默认情况下,ItemTouchHelper会通过translateX/Y属性来移动item,你可以重写Callback#onChildDraw()或者Callback#onChildDrawOver(),大多数情况下你只需要重写onChildDraw()

二 列表滑动删除、移动换位效果

1 效果图

在这里插入图片描述

2 需求

  • 列表动态展示数据
  • 列表item可左右滑动删除当前项
  • 选中item特定view或者长按item,可以移动并改变当前item在整个list中的位置

3 需求分析

  • RecyclerView实现动态列表效果

  • ItemTouchHelper设置每个item的响应手势方向,并获取响应手势和数据的要素

  • 相应的动画分两类:
    上下移动,move 和 左右侧滑 swipe

  • 手指没有和屏幕分离
    ItemTouchUIUtilImpl.draw();

  • 手指和屏幕分离
    RecoverAnimation

  • 猜想 MotionEvent.ACTION_MOVE 干了什么? 移动view!计算滑动距离
    mRecyclerView.invalidate(); 触发 onDraw

4 Demo

ItemTouchHelperActivity

三 ItemTouchHelper拓展

1 效果图

在这里插入图片描述

2 需求

  • 动态列表左滑删除效果
  • 列表左滑后显示不同布局
  • 显示的布局可以单独设置点击事件

3 需求分析

为什么onclick 事件没有发送上来?
原因:事件被消费了
解决方案:

  1. 自定义onclick 的传递
  2. 销毁动画的实现

5 Demo

ItemTouchExtensionActivity

6 注意

  • 常见的效果可以直接设置,但是在动态item和设置不同背景时,ItemTouchHelper的事件处理方法是私有的,相应事件、Canvas、坐标无法获取,这里可以直接简单的将v4包中的ItemTouchHelper代码拷贝出来,自定义一个ItemTouchHelper来替换系统的ItemTouchHelper
  • RecyclerView的ItemDecoration 不是分割线,它可以设置分割线效果
  • Demo中的v4包没有animation子包(不同的v4包),所以拷贝了该包到项目中去了
发布了211 篇原创文章 · 获赞 63 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/baopengjian/article/details/103427209