android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。
一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP
当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,这个时候android系统如何处理Touch事件呢?到底是ViewGroup来处理Touch事件,还是子view来处理Touch事件呢?我只能很肯定的对你说不一定。呵呵,为什么呢?看看下面我的调查结果你就明白了。
每个View中都有的三个函数调用顺序:
此View 先调用dispatchTouchEvent ------> 再调用此View的
onInterceptTouchEvent 返回值为真---------》直接调用此View的onTouchEvent
返回值为假-----》调用下一个View的dispatchTouchEvent
android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
事件分发是由:rootView → 子View
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
在分发过程中,如果哪一个的View 的 onInterceptTouchEvent 返回值为真的话
则停止像其子View 分发事件,子View 将得不到事件
默认的返回值为false
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
onTouchEvent 如果返回值为真: 则将会执行onTouchEvent 中的内容,它的父View 将不会处理此事件
如果返回值为假:则不会执行onTouchEvent 中的内容, 交给它父View, 由父View 的OnTouchEvent返回值决定
默认返回值为假。