單純的知識(shí)是無(wú)力的捉蚤,需要靈活運(yùn)用,轉(zhuǎn)化為實(shí)際的開發(fā)經(jīng)驗(yàn)题暖。
ViewGroup 的事件分發(fā)非常復(fù)雜的,這里略過(guò)了多點(diǎn)觸控的部分。
詳細(xì)的可以看:
http://wangkuiwu.github.io/2015/01/04/TouchEvent-ViewGroup/
第一,重置狀態(tài)祠够。
接收 DOWN 事件時(shí),如果 TouchTarget 不為 null滴须,則向 TouchTarget 發(fā)送 CANCEL 事件,并則將其重置為 null。
一般來(lái)說(shuō),接收到新的 DOWN 事件時(shí)将宪, TouchTarget 應(yīng)該已經(jīng)被重置為 null 了丑勤。
但不排除父視圖攔截了 UP 事件的可能性(或其他情況)。
重置狀態(tài)是為確保上一次 touch gesture 不會(huì)影響到接下來(lái)的一系列操作。
第二 泛豪,攔截判斷
如果沒(méi)有子視圖消費(fèi) DOWN 事件(即 TouchTarget 為 null,無(wú)論是被父視圖攔截了劝萤,還是沒(méi)可以消費(fèi)該事件的子視圖,又或者明明接收了事件并做出相應(yīng)的處理,最終卻返回個(gè) false),那么后續(xù)事件會(huì)被分發(fā)給父視圖。
如果 TouchTarget 不為 null崇渗,后續(xù)事件會(huì)被分發(fā)給 TouchTarget 處理乘碑,事件相對(duì)坐標(biāo)可能有所變化绪抛。
第三,別記結(jié)論。
以上只是使用 ViewGroup 默認(rèn) dispatchTouchEvent 的結(jié)論闹啦。
如果重載了 dispatchTouchEvent 或其內(nèi)部調(diào)用的其他函數(shù)江场,需要重新分析滑负。?