源码阅读:Android UI分发机制
方法名
dispatchTouchEvent(MotionEvent ev)
基础逻辑
@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {boolean intercepted = onInterceptTouchEvent(ev);boolean consume = false;if(intercepted){consume = onToucheEvent(ev);}else{consume = child.dispachToucheEvent(ev);}return consume;
}
这是一段伪代码
在点击事件的分发过程中,dispatchTouchEvent是首先进行处理的
其中onInterceptTouchEvent的返回值表明这个ViewGroup会不会拦截这个事件,如果拦截,表示这个事件会交由这个ViewGroup的onTouchEvent来处理
如果不拦截,就表示需要在子控件中去处理这个点击事件;
不管这个事件最终由谁处理,都会得到一个消息是否消耗的consume变量,这个变量表示的是消息是否被消耗掉
如果消息不被消耗掉的话 最终该消息会交由Activity的onTouchEvent来处理
