@xujun94
2016-06-28T17:57:54.000000Z
字数 1717
阅读 1699
View的事件分发机制
本文固定连接:https://www.zybuluo.com/xujun94/note/420803
可以参考这篇文章:http://www.jianshu.com/p/e99b5e8bd67b
到底是
android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View,
TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,
如果dispatchTouchEvent返回true 消费事件,事件终结。
如果dispatchTouchEvent返回 false ,则回传给父View的oNTouchEvent事件处理;
> onTouchEvent事件返回true,事件终结,返回false,交给父View的OnTouchEvent方法处理
如果dispatchTouchEvent返回super的话,默认会调用自己的onInterceptTouchEvent方法
> 默认的情况下interceptTouchEvent回调用super方法,super方法默认返回false,所以会交给子View的onDispatchTouchEvent方法处理
如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,
如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。
注意View和ViewGroup的diapatchTouchEvent默认super的实现方式,
View的默认实现是调用自身的onTouchEvent,ViewGroup的默认实现是调用自身的onInterceptTouchEvent方法