在app开发过程中常常需要订制控件处理Touch事件。本文介绍Android应用层是分发Touch事件的机制。
整体来说Touch事件的分发遵从“V”字形结构,如下图所示(图有点粗糙:-D) :
View和ViewGroup的关系图如下:
主要有三点:
1、外层的ViewGroup先接收到事件,ViewGroup在dispatch中调用intercept决定分发方向:如果intercept返回true,则向内层控件分发;反之,直接分发到自己的touch函数。
2、touch函数的返回值决定事件是否继续传递:返回true,则表示消费了,不在将该事件往后传递;反之则将该事件继续往后传递。
3、一次事件的最终返回值决定后续事件是否被接收:如果Activity和所有控件的touch函数都没有消费该事件(touch返回true),则后续事件不再被接收;反之,则继续接收后续事件。
“V"字形的左边是dispatch函数,下方拐点是内层View的touch函数,右边是外层View的touch函数。当然,最内层是个ViewGroup也是可以的。