事件分發(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終止此次事件。