本文主要研究ViewGruop事件源码分析,一个触摸操作,到底触发ViewGroup和View的那些事件分发。
演示代码如下:
1、在正常未处理的情况下,完整的事件分发的顺序 Down-->Move-->Up
第一次在Down事件下 :ViewGroup.dispatchTouchEvent----> ViewGroup.onInterceptTouchEvent
---->View.dispatchTouchEvent ----> View.onTouch----->View.onTouchEvent
第二次在Move事件下 :ViewGroup.dispatchTouchEvent----> ViewGroup.onInterceptTouchEvent
---->View.dispatchTouchEvent ----> View.onTouch----->View.onTouchEvent
第三次在UP事件下 : ViewGroup.dispatchTouchEvent----> ViewGroup.onInterceptTouchEvent
----> View.dispatchTouchEvent ----> View.onTouch----->View.onTouchEvent ------>View.onClick
源码流程分析
总结:最终在OnClick结束此次触摸事件
2、在上述测试代码掐掉OnClick()的情况下,完整的事件分发的顺序 Down-->Move-->Up
第一次在Down事件下 :ViewGroup.dispatchTouchEvent---->ViewGroup.onInterceptTouchEvent
---->View.dispatchTouchEvent ---->View.onTouch----->View.onTouchEvent------>ViewGroup.onTouchEvent
第二次在Move事件下 :无
第三次在UP事件下 : 无
源码分析
3、在上述测试代码ViewGroup.onInterceptTouchEvent(true) 的情况下,完整的事件分发的顺序 Down-->Move-->Up
第一次在Down事件下:ViewGroup.dispatchTouchEvent---->ViewGroup.onInterceptTouchEvent---->ViewGroup.onTouchEvent
第二次在Move事件下:无
第三次在UP事件下: 无
源码分析
4、在上述测试代码 View.onTouchEvent(true) 的情况下,完整的事件分发的顺序 Down-->Move-->Up
第一次在Down事件下 :ViewGroup.dispatchTouchEvent---->ViewGroup.onInterceptTouchEvent
---->View.dispatchTouchEvent ---->View.onTouch----->View.onTouchEvent
第二次在Move事件下 :ViewGroup.dispatchTouchEvent---->ViewGroup.onInterceptTouchEvent
---->View.dispatchTouchEvent ---->View.onTouch----->View.onTouchEvent
第三次在UP事件下 : ViewGroup.dispatchTouchEvent---->ViewGroup.onInterceptTouchEvent
----> View.dispatchTouchEvent ---->View.onTouch----->View.onTouchEvent
源码分析
参考上一篇文章,View的onTouch事件的源码分析