Android的事件分发机制 笔记

    科技2022-07-14  126

    Andorid系统SDK有一个抽象类叫做Window本意是窗口视图 目前只有一个PhoneWindow实现了这个类

    PhoneWindow:将DecorView设置为整个应用窗口的根View

    DecorView:根视图 把内容显示到PhoneWindow上面

    也就是说一个activity 包含一个实现window的PhoneWindow  以及一个DecorView,应用层开发的所有控件都是添加到该视图中

    从手指点击到屏幕上开始 事件是这样传递的 Activity--ViewGroup--View

    拦截和处理操作都在这三个方法

    dispatchTouchEvent:表示是否拦截事件 默认false 不拦截 onInterceptTouchEvent:该方法只存在于ViewGroup 是否拦截该事件继续向下传递 onTouchEvent:处理手指在屏幕上的的ACTION_DOWN ACTION_MOVE ACTION_UP事件

    假如一个activity有一个layout根布局  布局里面有一个view 当手指点击view 默认的话都是调用父类的false

    那么事件的传递顺序就是

    Activity dispatchTouchEvent ->ViewGroup dispatchTouchEvent ->ViewGroup onInterceptTouchEvent -> View dispatchTouchEvent ->View onTouchEvent-> ViewGroup onTouchEvent->Activity onTouchEvent-> 然后循环Activity dispatchTouchEvent->Activity onTouchEvent

    如果在三个传递过程中dispatchTouchEvent 返回了true事件就被消费了 不在往下传递

     

    Processed: 0.014, SQL: 8