每个View的子类都有三个与 TouchEvent 密切相关的方法:
1)分发 TouchEvent 事件:
public boolean dispatchTouchEvent (MotionEvent ev)
2)拦截 TouchEvent 事件:
public boolean onInterceptTouchEvent(MotionEvent ev)
3)处理 TouchEvent 事件:
public booleanonTouchEvent (MotionEvent ev)
首先在发生一个TouchEvent事件时,Activity 将TouchEvent传递给顶层View,该TouchEvent首先进入到该View的dispatchTouchEvent(MotionEvent ev)
如果返回 true:
交给该View 的 onTouchEvent (MotionEvent ev) 处理
如果返回 false:
交给该View的 onInterceptTouchEvent(MotionEvent ev)来决定是否进行拦截
如果返回 true:
该事件被拦截掉,交给当前View的 onTouchEvent (MotionEvent ev)处理,不再传递给子View
如果返回 false:
将事件传递给 子View,由子View的dispatchTouchEvent (MotionEvent ev)从新开始分发事件
在某一层子View的 onTouchEvent (MotionEvent ev)方法中:
如果返回 true:
该事件被处理掉
如果返回 false:
该事件将往上传到父容器,由父容器的onTouchEvent (MotionEvent ev)来处理