View事件分發

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

https://www.tuicool.com/articles/byAbuqa

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章