Android 事件分发机制原理
View 结构
PhoneWindow -> DecorView -> RootView -> ViewGroup(or -> View ) ->View
PhoneWindow
Window是一个抽象类,是所有视图的最顶层容器,视图的外观和行为都归他管,不论是背景显示,标题栏还是事件处理都是他管理的范畴
DecorView
DecorView 是 PhoneWindow 的一个内部类。PhoneWindow 的指示通过 DecorView 传递给下面的 View,而下面 View 的信息也通过 DecorView 回传给 PhoneWindow
事件分发、拦截与消费
事件分发 dispatchTouchEvent
事件拦截 onInterceptTouchEvent
事件消费 onTouchEvent
三个方法通过返回 true 和 false 来控制事件传递的流程。 true 表示消费,false 表示不消费,与是否使用了事件无关
事件分发流程
Activity -> PhoneWindow -> DecorView -> ViewGroup -> View
如果没有任何View消费掉事件,那么这个事件会按照反方向回传,最终传回给Activity
Activity <- PhoneWindow <- DecorView <- ViewGroup <- View