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