dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
dispatchTouchEvent()
該方法是用來處理事件的分發。如果事件能夠傳遞到當前View,那麼一定會調用此方法
源碼:
public boolean dispatchTouchEvent(Motion e){
boolean result=false;
if(onInterceptTouchEvent(e)){
//如果當前View截獲事件,那麼事件就會由當前View處理,即調用onTouchEvent()
result=onTouchEvent(e);
}else{
//如果不截獲那麼交給其子View來分發
result=child.dispatchTouchEvent(e);
}
return result;
}
onInterceptTouchEvent()
該方法在上邊可以看出,是在dispatchTouchEvent中調用,來判斷自己是否需要截取事件,如果該方法返回爲true,那麼View將消費該事件,即會調用onTouchEvent()方法。如果返回false,那麼通過調用子View的dispatchTouchEvent()將事件交由子View來處理
onTouchEvent()
和onInterceptTouchEvent()一樣也是在dispatchTouchEvent中調用的。用來處理點擊事件,包括ACTION_DOWN,ACTION_MOVE,ACTION_UP。如果返回結果爲false表示不消費該事件,並且也不會截獲接下來的事件序列。如果返回爲true表示當前View消費該事件。
E/ViewGroup1: ViewGroup1 dispatchTouchEvent
E/ViewGroup1: ViewGroup1 onInterceptTouchEvent
E/ViewGroup2: ViewGroup2 dispatchTouchEvent
E/ViewGroup2: ViewGroup2 onInterceptTouchEvent
E/CustomView: CustomView dispatchTouchEvent
E/CustomView: CustomView onTouchEvent
E/ViewGroup2: ViewGroup2 onTouchEvent
E/ViewGroup1: ViewGroup1 onTouchEvent