ItemTouchHelper是官方提供的增强RecyclerView的方案,提供侧滑删除和拖动位置的功能,使用上不算特别简单,需要自己实现Callback回调接口。本文略过使用方法主要从整体流程上分析ItemTouchHelper的实现原理。
流程概述
ItemTouchHelper是通过先行拦截RecyclerView的MotionEvent实现的,ItemTouchHelper先判断是否消耗事件,不消耗才由RecyclerView继续处理,入口如下:
//都是RecyclerView的方法
public boolean onInterceptTouchEvent(MotionEvent e) {
mInterceptingOnItemTouchListener = null;
if (findInterceptingOnItemTouchListener(e)) {
cancelScroll();
return true;
}
......
}
public boolean onTouchEvent(MotionEvent e) {
if (dispatchToOnItemTouchListeners(e)) {
cancelScroll();
return true;
}
......
}
onInterceptTouchEvent判断是否消耗事件,onTouchEvent处理消耗后的具体操作。熟悉安卓view事件体系的应该知道,onInterceptTouchEvent方法只有在目前尚未知道由哪个view消耗事件的时候才会调用,一旦有某个view消耗了事件(return true),那么下次再有事件到达的时候(down除外),就会默认交给那个view,不再依次调