看了好多文章,决定写下一些自己的理解。
这篇文章讨论的情况,只属于,多ViewGroup 多控件,消息响应机制。
题目有点大,我主要说简单的理解。
touch 事件,先响应onInterceptTouchEvent 然后再往下响应onTouchEvent。
onInterceptTouchEvent 是ViewGroup 消息响应的重要方法。 用于处理事件并改变事件的传递方向,该方法返回一个boolean值,
这个boolean 值 决定 touch 事件是否要向 childview 传递 。
onTouchEvent 方法,用于接收事件并处理,它的返回值也是一个boolean,决定事件以及后续事件是否继续传递。
touch事件在onInterceptTouchEvent 和onTouchEvent 以及各个childview间传递机制完全取决于 这两个方法的返回值。
返回值为true表示事件正被正确的接收和处理,返回值为false表示事件没有被处理,将继续传递下去。
ACTION_DOWN 事件会从高层 (高等级的ViewGroup)类的onInterceptTouchEvent 逐渐往低等级的ViewGroup传递,最终传到View控件。
ViewGroup 之间传递 是传递onInterceptTouchEvent 事件,但是View控件响应的是onTouchEvent 事件。
如果某个ViewGroup 的onInterceptTouchEvent 返回了true,则DOWN 事件传递给 它的onTouchEvent,从此便不往下面传递了(即使下面有ViewGroup和View控件)。
如果 某个View控件(底层)的onTouchEvent返回了false,则DOWN 事件往高层ViewGroup类的onTouchEvent传递,如果返回了true,则后续事件直接传递给其它的
onTouchEvent继续处理,后续事件只会发给响应DOWN的View 或者ViewGroup
这不禁让我想起了 视图栈
底层框架在 栈底,栈顶的是View控件,消息从栈底发出来, 一层层响应,如果有人敢兴趣 ,就返回了。如果一直传递到View控件 都没人响应,就会再把消息发回去,再看一次是否有人感兴趣。
http://www.cnblogs.com/kingcent/archive/2011/03/08/1977064.html 该文章很给力