事件分發(fā)原理(不包括實(shí)戰(zhàn))

事件分發(fā)

事件分發(fā),不論在面試還是在項(xiàng)目中出現(xiàn)的頻率都是很大的,我對事件分發(fā)機(jī)制原理一直是模棱兩可的,所以花了一點(diǎn)時間徹底梳理一下,以備自己遺忘后可以快速的記起。

事件分發(fā)流程圖

屏幕快照 2017-09-14 下午1.32.11.png

流程圖解析

1 處理事件分發(fā)有三個層級  Activity 層   viewGroup 層   view 層
2 處理事件有三個方法,dispatchTouchEvent  onInterceptTouchEvent   
 onTouchEvent 
3 dispatchTouchEvent 如果是返回的是true,表明在本層進(jìn)行消費(fèi),如果是
 false,則表明不消費(fèi)此事件(不接受,所以其子控件也就不會接收到這個事
 件,并進(jìn)行相應(yīng)的操作),如果是返回的是true,說明這個層級是消費(fèi)這個事件
 的,這個時候調(diào)用的是onIntercepTouchEvent方法,這個方法返回的是true,說
 明對這個事件進(jìn)行攔截,不給自view了,直接調(diào)用本層級的onTouchEvent方
 法,對事件進(jìn)行消費(fèi),如果是返回的false說明是不攔截這個事件,傳遞給子
 view,會調(diào)用子view的dispatchTouchEvent方法,這個方法也會返回一個值,
 如果是true,說明我這要消費(fèi),這時會調(diào)用onTouchEvent的方法,進(jìn)行事件的
 處理。如果是false,表示我也不干,這時候會調(diào)用上一層級的onTouchEvent方
 法,它也會返回一個值,如果是true,說明這個活我干了,你不用管了。如果是
 false就說明,我也不干,接著返回上衣層級的onTouchEvent方法,這里進(jìn)行著
上述同樣的操作。如果都不消費(fèi)最終會交給activity終止此次事件。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容