Android-事件分發(fā)機制

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容