一、概述
进一步学习Recyclerview,今天我们主要了解RecyclerView的辅助类,ItemTouchHelper。
首先看下实现效果:
二、主要实现功能点
2.1、上图比较简单,从动态图可以分析出几个功能点:
a,点击item左边图片,长按item,实现item条目的拖拽移动。
c,上下移动item条目的时候,item位置互换,交互动画。
d,左右侧滑,删除item,伴随透明度渐变
三、项目结构,及代码分析
3.1项目结构:
3.2代码分析
a、DataUtils主要是用来给QQAdapter填充数据.
b、MainActivity中关键代码如下:
首先是为recyclerview设置adapter,然后实例化ItemToucherHelper辅助类,和recyclerview关联起来,对其进行item条目的监听。ItemToucherHelper实例化时传入callback回调函数,这个回调函数是其内部类,对用户的item操作,动作进行监听。
c、重点介绍下,MyItemTouchHelperCallback类。
这个方法返回一个int类型的标识 表示哪些移动行为是被允许的,这里面处理的是上下移动和左右侧滑都可以。
这个方法主要是是否允许长按拖拽。
此方法用来监听处理用户上下拖拽移动操作,这个方法里,首先,判断是否是同一类型的item,不是的话,就返回false不处理,否则,调用回调接口,将源holder和目标holder的位置传入,然后再adapter中实现这个接口,进行数据的交换,和界面刷新及动画效果,实现item条目的拖拽移动,主要是在这个方法里面进行处理。
这个方法,用来监听,用户的侧滑动作,里面调用接口的方法,由适配器QQAdapter进行调用,实现数据的删除,和界面刷新。
这个方法里面设置用户选中时条目的背景颜色
用户操作完成,还原时,对item背景颜色进行还原
这个方法里,实现侧滑动画效果。
d、自定义callback类的方法介绍完毕,再简单说下Adapter
实现结构中的回调方法,完成相关操作,移动数据和删除数据。
在onBindViewHolder方法中对条目左侧图片进行的触摸事件进行重写,处理向下触摸,开始拖动viewholder,这个接口方法在MainActivity中实现,由mItemToucherHelper调用。
e、最后简单说先两个接口,一个,StartDragListener,一个OnMoveItemListener,StartDragListener里面有startDrag(ViewHolder hodler)方法,主要是条目的拖动的回调方法,OnMoveItemListener里面有moveItem(int fromposition,int toposition),和removeItem(int position),实现条目拖拽交互,和条目删除的回调。
一般,两个类之间进行数据交互,都采用接口回调的方式。而不是直接传入另一个类的引用。
分析完毕,代码地址:http://pan.baidu.com/s/1o7SwjKQ