View重写两个方法(事件分发、处理),ViewGround重写三个方法(事件分发、拦截、处理)。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev); //返回true,拦截
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(ev);//返回true,说明处理了;返回false,给上级处理
}
默认流程:
ViewGroundA dispatchTouchEvent ->
ViewGroundA onInterceptTouchEvent ->
ViewGroundB dispatchTouchEvent ->
ViewGroundB onInterceptTouchEvent ->
View dispatchTouchEvent ->
View onTouchEvent ->
ViewGroundB onTouchEvent ->
ViewGroundA onTouchEvent
ViewGroundA进行拦截:
ViewGroundA dispatchTouchEvent ->
ViewGroundA onInterceptTouchEvent ->
ViewGroundA onTouchEvent
ViewGroundB进行拦截:
ViewGroundA dispatchTouchEvent ->
ViewGroundA onInterceptTouchEvent ->
ViewGroundB dispatchTouchEvent ->
ViewGroundB onInterceptTouchEvent ->
ViewGroundB onTouchEvent ->
ViewGroundA onTouchEvent
View处理事件返回true:
ViewGroundA dispatchTouchEvent ->
ViewGroundA onInterceptTouchEvent ->
ViewGroundB dispatchTouchEvent ->
ViewGroundB onInterceptTouchEvent ->
View dispatchTouchEvent ->
View onTouchEvent