Touch事件分发中只有两个主角:ViewGroup和View。Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理。
View在ViewGroup内,ViewGroup也可以在其他ViewGroup内,这时候把内部的ViewGroup当成View来分析。
View的相关事件只有两个:dispatchTouchEvent、onTouchEvent。ViewGroup的相关的事件在View的基础上则多一个事件onInterceptTouchEvent,只要是对ViewGroup可响应的事件进行拦截处理。
整个ViewGroup处理流程,可以看做是Touch事件在以ViewGroup为中间节点、View为根节点的树状结构中寻找响应。
1、当根节点接收到Touch事件时,就会调用自身的dispatchTouchEvent方法,向他的子节点分发Touch事件,如果其子节点为ViewGroup,那么就继续下发;
2、当Touch事件到达View时,V通过dispatchTouchEvent调用自身的onTouchEvent方法,如能响应则返回true,否则返回false;
3、当ViewGroup的子节点全部返回false的时候,ViewGroup便调用自身的onTouchEvent方法来尝试响应处理,如果成功则返回true,否则返回false,继续向上反馈;
4、直至找到Touch事件对应的响应处理节点,在分发的过程中,如果中间节点onInterceptTouchEvent()方法返回true,则不向下分发,直接调用本节点的onTouchEvent方法响应
时间: 2024-10-11 17:51:36