android 的事件传递,一直是我比较头疼的问题,今天好好理一下
先看图片
基本结构,可以看Activity 下面的那个图,Activity中ViewGroup包含有View。
第一个先来看Activity:如果在Activity中返回的dispatchEvent(MotionEvent ev) 的方法中,返回true 和 false ,
事件都是不会往下继续传递的了,也就是自己消费了该事件。
如果返回super.dispatchEvent(MotionEvent ev),则会继续传递给ViewGroup,一般情况下,如果要自定义View包括ViewGroup,都不会在Activity层重写dispatchEvent(MotionEvent ev)方法,使用默认的即可
第二是ViewGroup :当事件传递到ViewGroup时,会先走事件拦截方法也就是onInterceptTouch(MotionEvent ev),也是重写步骤中很关键的方法。如果返回true ,则自己消费了该事件,不会继续传递,则其他的子View 不会再接收到事件消息,如果返回false 或是默认的super.onInterceptTouch(MotionEvent ev)则是会继续传递给子view的。
接下来就是View ,view 主要看的onTouchEvent(MotionEvent ev),如果返回true ,则会自己消费该事件,不会向上继续传递了