事件序列
封装成MotionEvent,分别有Action_Down, Action_Move, Action_Up, Action_Cancel
事件传递层级
Activity->Window->DecorView->ViewGroup->View
事件分发
三者关系伪代码示例:
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean handled = false;
if(onInterceptTouchEvent(ev)){
handled = onTouchEvent(ev);
}else {
handled = child.dispatchTouchEvent(ev) ;//只要下级子view没有消耗事件就依次向上返回false,直至最外层ViewGroup;只要有一层消耗掉事件,就返回true
}
return handled;
}
1、在没有做任何处理,也即默认情况下,触摸屏幕发生的一系列事件分发过程:
如果DOWN事件没有被消费,则后续的MOVE/UP事件将不会传递过来,直接在Activity层处理
2、如果子View消费了事件,则事件的分发过程为:
Move和UP事件的消费是依赖于Down事件的,如果down事件的消费发生在某个子view上,表明该子view获取了事件焦点,因此move和up事件也发生在该view上。