美文网首页
View 的事件分发机制

View 的事件分发机制

作者: 福later | 来源:发表于2018-06-14 18:13 被阅读0次

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

    以下是我自己的总结:

    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,到此结束

    相关文章

      网友评论

          本文标题:View 的事件分发机制

          本文链接:https://www.haomeiwen.com/subject/kytueftx.html