近期做一个拖拽的项目,需要实现listView的单击效果,滑动效果以及长按时的拖拽效果。这里主要需要考虑Android中的TouchEvent事件分发处理。
如图所示,当listView调用onInterceptTouchEvent函数处理完后,若返回false,该事件将继续往子View分发,如果返回
true,不再向子view分发,直接调用本级的onTouchEvent方法。同样,在子调用onTouchEvent方法时,如果返回false,表明
子不消费该事件,全部交给父处理;如果子返回true,表明子消耗该事件,父只能收到
dispatchTouchEvent事件和onInterceptTouchEvent事件,收不到onTouchEvent事件。
另外,TouchEvent和OnClick的相应事件顺序为ACTION_DOWN->ACTION_MOVE->OnLongClick->ACTION_UP->OnClick。
listview和gridview,默认子item只能收到action_down事件,收不到action_move和action_up事件,因为listview要响应自己的onTouchEvent,打印log可以发现,子item的onTouchEvent事件返回了false,onTouchEvent事件交由上层处理,如果需要子item响应,只需要设置子item可以点击即可,但是此时子item可以处理onTouchEvent事件,父就收不到响应事件了。