Android Touch事件传递机制
-
在我们点击屏幕时,会有下列事件发生: Activity调用dispathTouchEvent()方法,把事件传递给Window; Window再将事件交给DecorView(DecorView是View的根布局); DecorView再传递给ViewGroup;
Activity ——> Window ——> DecorView ——> ViewGroup——> View
事件分发的主要有三个关键方法 dispatchTouchEvent() 分发 onInterceptTouchEvent() 拦截 ,只有ViewGroup独有此方法 onTouchEvent() 处理触摸事件
Activity首先调用dispathTouchEvent()进行分发,接着调用super向下传递
ViewGroup首先调用dispathTouchEvent()进行分发,接着会调用onInterceptTouchEvent()(拦截事件)。若拦截事件返回为true,表示拦截,事件不会向下层的ViewGroup或者View传递;false,表示不拦截,继续分发事件。默认是false,需要提醒一下,View是没有onInterceptTouchEvent()方法的
事件在ViewGroup和ViewGroup、ViewGroup和View之间进行传递,最终到达View;
View调用dispathTouchEvent()方法,然后在OnTouchEvent()进行处理事件;OnTouchEvent() 返回true,表示消耗此事件,不再向下传递;返回false,表示不消耗事件,交回上层处理。