關(guān)于Android View的事件分發(fā)機(jī)制看過(guò)很多文章,踩過(guò)很多的坑奄妨,也一直有自己的理解烙如,但是當(dāng)我看到這篇文章之后么抗,真的覺(jué)得它非常好,作者表述的讓人非常容易理解亚铁,不會(huì)那么抽象蝇刀。下面是傳送門(mén):
https://github.com/Idtk/Blog/blob/master/Blog/11、TouchEvent.md
感覺(jué)自己再多做一些總結(jié)都是累贅徘溢,不過(guò)我還是想用自己的話來(lái)說(shuō)一遍吞琐。
比如有三個(gè)小兄弟老大<Activity>仰迁、老二<ViewGroup>、老三<View>顽分。突然有一天徐许,家里發(fā)現(xiàn)丟了錢(qián),老父親就開(kāi)始審問(wèn)三個(gè)孩子卒蘸,到底是誰(shuí)拿了錢(qián)雌隅。(用戶開(kāi)始觸發(fā)事件)先問(wèn)答老大<Activity>是不是你拿的,老大直接甩鍋“不是我拿的”缸沃,然后嫌疑就到了老二的頭上(事件傳遞給了ViewGroup)恰起,老二這個(gè)時(shí)候就比較糾結(jié)了他有兩種選擇:
1、自己承認(rèn)拿了錢(qián)那么就由老二來(lái)承擔(dān)這個(gè)責(zé)任(調(diào)用ViewGroup 的onTouchEvent)->(ViewGroup的onInterceptTouchEvent返回true)趾牧。
2检盼、甩鍋給老三<View>(ViewGroup的onInterceptTouchEvent返回false)那么老父親就開(kāi)始審問(wèn)老三。
同樣的老三也面臨著和老二一樣的困境:
1翘单、自己承認(rèn)拿了錢(qián)那么就由老三來(lái)承擔(dān)這個(gè)責(zé)任(調(diào)用View 的onTouchEvent)->(View的onInterceptTouchEvent返回true)吨枉。
2、打死也不承認(rèn)(View的onInterceptTouchEvent返回false)然后老父親沒(méi)辦法就只能罰老大(Activity)哄芜。