Android事件的分發(fā)及處理

事件因素:Activity --> ViewGroup --> View

一、Activity中攔截事件

1,Activity_dispatch攔截,返回false的情況

? ? ? Activity_dispatch --> DOWN / UP / MOVE --> 分發(fā)結(jié)束

2,Activity_dispatch攔截,返回true的情況

? ? ? Activity_dispatch --> DOWN / UP / MOVE --> 分發(fā)結(jié)束

3,Activity_onTouchEvent攔截,返回false的情況

? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束

? ? ? (MOVE / UP事件,ViewGroup_dispatch將不再執(zhí)行) Activity_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束

4,Activity_onTouchEvent攔截,返回true的情況

? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束

? ? ? (MOVE / UP事件,ViewGroup_dispatch將不再執(zhí)行) Activity_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束

二、ViewGroup中攔截事件

1,ViewGroup_dispatch 攔截,返回false的情況

? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束

? ? (MOVE / UP事件,ViewGroup_dispatch將不再執(zhí)行) Activity_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束

2,ViewGroup_dispatch 攔截,返回true的情況

? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> 分發(fā)結(jié)束

? ? (MOVE / UP事件)? Activity_dispatch --> ViewGroup_dispatch --> 分發(fā)結(jié)束

3,ViewGroup_intercept 攔截,返回false的情況(默認(rèn))

? ? ? (DOWN / UP / MOVE) Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> View_dispatch --> View_onTouchEvent --> 分發(fā)結(jié)束

4,ViewGroup_intercept 攔截,返回true的情況(默認(rèn))

? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> ViewGroup_onTouchEvent --> 分發(fā)結(jié)束

? ? ? (MOVE / UP 事件,ViewGroup_onIntercept返回true后,不再調(diào)用)? Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onTouchEvent --> 分發(fā)結(jié)束

5,ViewGroup_intercept 根據(jù)條件判斷攔截,不攔截DOWN事件,攔截MOVE事件

? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> View_dispatch --> View_onTouchEvent --> 分發(fā)結(jié)束

? ? ? (首次 MOVE事件攔截,此次事件分發(fā),雖然攔截了MOVE事件,但還會(huì)繼續(xù)下發(fā)。不同之處在于,view接收到的事件不是MOVE而是CANCLE)

? ? ? Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> View_dispatch --> View_onTouchEvent --> 分發(fā)結(jié)束

? ? (再次 MOVE事件攔截,ViewGroup_onIntercept將不再調(diào)用)

? ? ? Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onTouchEvent -- > 分發(fā)結(jié)束

6,UP事件一般不做攔截。

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

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