基礎(chǔ)Demo程序結(jié)構(gòu)示意圖
最基本的布局
MainActivity是最外層布局
OutView繼承ViewGroup
InnerView繼承View
系統(tǒng)默認(rèn)的事件流向(點(diǎn)擊InnerView)
針對(duì)這三個(gè)方法,職責(zé)和造成的影響如下
下面分幾種情況介紹一下
1. 當(dāng)覆寫MainActivity中的dispatchTouchEvent方法的時(shí)候
- true和false,都會(huì)導(dǎo)致事件直接結(jié)束傳遞辛慰,因?yàn)闆]有父節(jié)點(diǎn)了音诈,所以事件無法向上傳遞
2. 當(dāng)覆寫OuterView中的dispatchTouchEvent方法的時(shí)候
- 當(dāng)返回值為 true 的時(shí)候伐憾,直接結(jié)束在此方法中結(jié)束事件傳遞
- 當(dāng)返回值為 false 的時(shí)候巢掺,事件會(huì)回傳到父節(jié)點(diǎn)(MainActivity)的onTouchEvent方法中
3. 當(dāng)覆寫OuterView中的onInterceptTouchEvent方法的時(shí)候
- 當(dāng)返回值為 true 的時(shí)候利朵,阻止事件向下傳遞篮撑,轉(zhuǎn)到自己的onTouchEvent中
- 當(dāng)返回值為 false 的時(shí)候,對(duì)本次事件傳遞不會(huì)有影響
4. 關(guān)于覆寫各個(gè)節(jié)點(diǎn)中的onTouchEvent方法的時(shí)候
- 這個(gè)方法有個(gè)特點(diǎn)就是在岂,如果默認(rèn)不做任何處理奔则,各個(gè)節(jié)點(diǎn)的onTouchEvent方法執(zhí)行的順序一定是從里到外的(這里默認(rèn)點(diǎn)擊的是最里層View);當(dāng)有節(jié)點(diǎn)對(duì)事件進(jìn)行處理后蔽午,后續(xù)事件也會(huì)發(fā)送過來處理
4.1. MainActivity中返回true易茬、false或者super都沒什么區(qū)別,最后還是會(huì)回到MainActivity中
Down事件
MOVE及老、UP等后續(xù)事件
4.2. OuterView中返回true
Down事件
MOVE抽莱、UP等后續(xù)事件
4.3. OuterView中返回false
Down事件
MOVE、UP等后續(xù)事件
4.4. InnerView中返回true
Down事件
MOVE骄恶、UP等后續(xù)事件
4.5. InnerView中返回false
Down事件
MOVE食铐、UP等后續(xù)事件
這樣,所有的方法的影響基本就列舉完整了僧鲁,但是大多數(shù)情況下都是需要組合起來使用虐呻。基本就是系統(tǒng)事件傳遞主線中可以隨時(shí)進(jìn)行介入寞秃,根據(jù)每個(gè)方法的特性斟叼,去合理安排介入時(shí)機(jī)來完成事件的合理分發(fā)處理。