android 的事件傳遞,一直是我比較頭疼的問題,今天好好理一下
先看圖片

未命名.png
基本結(jié)構(gòu),可以看Activity 下面的那個(gè)圖,Activity中ViewGroup包含有View。
第一個(gè)先來看Activity:如果在Activity中返回的dispatchEvent(MotionEvent ev) 的方法中,返回true 和 false ,
事件都是不會(huì)往下繼續(xù)傳遞的了,也就是自己消費(fèi)了該事件。
如果返回super.dispatchEvent(MotionEvent ev),則會(huì)繼續(xù)傳遞給ViewGroup,一般情況下,如果要自定義View包括ViewGroup,都不會(huì)在Activity層重寫dispatchEvent(MotionEvent ev)方法,使用默認(rèn)的即可
第二是ViewGroup :當(dāng)事件傳遞到ViewGroup時(shí),會(huì)先走事件攔截方法也就是onInterceptTouch(MotionEvent ev),也是重寫步驟中很關(guān)鍵的方法。如果返回true ,則自己消費(fèi)了該事件,不會(huì)繼續(xù)傳遞,則其他的子View 不會(huì)再接收到事件消息,如果返回false 或是默認(rèn)的super.onInterceptTouch(MotionEvent ev)則是會(huì)繼續(xù)傳遞給子view的。
接下來就是View ,view 主要看的onTouchEvent(MotionEvent ev),如果返回true ,則會(huì)自己消費(fèi)該事件,不會(huì)向上繼續(xù)傳遞了