場景:
View A 放在viewGroupB中,viewGroupB又放在viewGroup C中。
對于viewGroup中,總共有三個方法:dispatchTouchEvent(MotionEvent e);onInterceptTouchEvent(MotionEvent e);onTouchEvent(MotionEvent e)。
對于view中,只有兩個方法:dispatchTouchEvent(MotionEvent e);;onTouchEvent(MotionEvent e);
當點擊事件觸發時,事件的傳遞順序為:Activity--------Window------頂級view
,頂級view就按照事件分發機制:C------B-------A;
事件的處理順序為:A------B------C;
事件傳遞的返回值:true :表示攔截,不繼續; false :表示不攔截,繼續流程;
事件的處理機制為:true :表示處理了,不用審核了,false:表示交給上級處理;
可用偽代碼表示:
public boolean ?dispatchTouchEvent(MotionEvent e){
? ? ? ?boolean consume=false;
? ? ? if(onInterceptTouchevent()){
? ? ? ? ? ? ? ?consume=onTouchEvent(); ? ? }
? ?else{
? ? ? ? ?consume=child.dispatchTouchevent(ev); ? ? ? ??
}
? ? ?return consume;
}