1 事件傳遞順序
Activity->ViewGroup->View,所以事件分發(fā)的機制也分為Activity、viewGroup、view三種
2 Activity事件分發(fā)
? ? a.圖

? ? b 解釋:調(diào)用activity的dispatchTouchEvent后,事件會從activity傳遞到phoneWindow,再傳遞到DecorView,再到viewGroup當中,然后判斷viewGroup是否消費該事件,消費了的話則activity的事件分發(fā)結(jié)束且返回true,viewGroup沒消費的話,則會判斷點擊事件是否在window邊界之外,在邊界之外則消費并返回true,否則在邊界內(nèi)則返回false
3 ViewGroup事件分發(fā)
? ? a.圖

? ? b.解釋:調(diào)用viewGroup的dispatchTouchEvent后,首先判斷onInterceptTouchEvent是否攔截該事件,如果攔截的話,會調(diào)用viewGroup父類(View)的dispatchTouchEvent方法,進而調(diào)用onTouch-》onTouchEvent-》PerformClick-》onClick方法,自己去處理該事件,如果沒攔截的話,會遍歷子view,尋找到被點擊的子view,進而調(diào)用子view的dispatchTouchEvent
4 View事件分發(fā)
? ? a.圖

? ? b.解釋:調(diào)用view的dispatchTouchEvent,然后判斷是否注冊touch事件監(jiān)聽,注冊了的話則調(diào)用onTouch方法,onTouch如果返回true,則代表消費了事件,view的dispatchTouchEvent返回true,否則調(diào)用onTouchEvent方法,接著判斷是否注冊了click事件,注冊了的話調(diào)用onClick方法,沒注冊則結(jié)束,同樣,沒注冊touch事件監(jiān)聽,也是走到onTouchEvent方法,調(diào)用onclick