上一篇,我们大体理解了分发的过程
理解了在 dispatchTouchEvent 和 onTouchEvent 的过程中 对应的顺序
还有 View 和 ViewGroup 的区别
具体代码可以见https://github.com/2954722256/demo_event
这里 我们给上一篇的2个例子,
只是在MainActivity中,
分别给2个控件, 添加上OnClick 和 OnTouch 事件
【EventButton】

点击 自定义的EventButton
可以发现对应的过程
MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
EventButton ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- btn setOnTouchListener onTouch ----> ACTION_DOWN ----> noMsg
EventButton ---- onTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- btn setOnClickListener onClick ----> nullEvent ----> noMsg
我们可以发现,和前面一样
从MainActivity分发下来事件
只是 先触发 OnTouch 的事件(对外的,对开发者的), 再 获取到OnTouchEvent事件(系统的,消费) , 再触发 OnClick 事件
我们可以理解成, 点击事件从最外层分发下来, 先触发 TouchListener回调接口, 系统获得处理OnTouch事件, 判断是否消费, 判断是Click事件, 再触发 ClickListener回调接口
【EventViewGroup】:

点击 自定义ViewGroup的 EventViewGroup 后
可以发现
MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
EventViewGroup ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- LL setOnTouchListener onTouch ----> ACTION_DOWN ----> noMsg
EventViewGroup ---- onTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- LL setOnClickListener onClick ----> nullEvent ----> noMsg
我们可以发现,和前面Button一样
先触发 OnTouch 的事件(对外的,对开发者的), 再 获取到OnTouchEvent事件(系统的,消费) , 再触发 OnClick 事件
只是, ViewGroup没有调用最外面Activity的OnTouchEvent方法了
** 可以理解成,这里消费掉了点击, 就不用调用上层的 OnTouch方法了 **
简单回顾
简单看了下对应的点击后的区别
我们简单对比一下

网友评论