1、在dispatchTouchEvent()中,当前action(down、move、up)返回true才会执行后边的action,若dispatchTouchEvent()直接return false,则后边的action不会得到执行
如:当用户按下 down时,dispatchTouchEvent() return false,则后边的move和up操作则不会执行,
当用户按下 down时,dispatchTouchEvent() {
switch(e.getAction){
case down:
return true;
case move:
return true;
case up:
return true;
}
},down/move/up的操作都会执行
当用户按下 down时,dispatchTouchEvent() {
switch(e.getAction){
case down:
return true;
case move:
return false;
case up:
return true;
}
},down/move/的操作都会执行,但up操作不会执行
2、父类拦截事件细节:拦截事件有两个控制变量,其中两个变量的关系才能拦截事件:
第一 是禁用拦截字段disallowIntercept 默认是false,若是没改动,则开发者只需要通过重写onInterceptTouchEvent() return true;来 拦 截事件,即disallowIntercept = false&&onInterceptTouchEvent() return true,则拦截事件,不会分发给子view;
第二 可以直接通getParent().requestDisallowInterceptTouchEvent(true),不禁用拦截事件,设置之后不会执行 onInterceptTouchEvent()方法,直接执行子view的dispatchTouchEvent()方法,之后就按照子view的分发机制
case down:
return true;
case down:
return true;
可以看到大体的事件流程为:
MyLinearLayout的dispatchTouchEvent -> MyLinearLayout的onInterceptTouchEvent -> MyButton的dispatchTouchEvent ->Mybutton的onTouchEvent