View 的事件分发机制

详细可看,这哥们花了点心思总结:点鸡我

以下是我自己的总结:

1:WindowService 循环读取用户输入事件,使用生产者消费者模式将事件传递到当前Activity,如何传递,Activity 内有个PhoneWindon 对象并且Activity实现了Windon.Callback,该对象通过setCallback(this) 方法与Window相关联,即在屏幕有用户输入时,首先WindowService 会将事件封装在MotionEvent 对象以参数形式传递给回调方法dispatchTouchEvent() 方法。

2:Activity dispatchTouchEvent(MotionEvent event) ->PhoneWindow.DocorView.superDispatchTouchEvent()->ViewGroup.dispatchTouchEvent() ;

3:在ViewGroup dispatchTouchEvent() 方法中,先判断自己是否拦截该事件即 onInterceperTouchEvent() 返回true or false ,false 代表不拦截,然后再根据触发点的坐标锁定子View ,然后走View 中 dispatchTouchEvent,如果触发点没有在子View上,则走super.dispatchTouchEvent() ->View.dispatchTouchEvent() ->View.onTouchEvent()自己去消事件

4:走完所有View 时间分发后,如果最终返回的是false,则走 Activity touchEvent 方法,到此结束,如果最终返回true,到此结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容