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事件就被消费了 不在往下传递