onTouch事件的傳遞機制
一、點擊事件傳遞機制:
- 1.view執行dispatchTouchEvent 方法,開始分發事件,返回值決定是否分發出去
- 2.執行onInterceptHoverEvent 方法,判斷是否中斷事件,返回值決定是否傳遞給子View
- 3.執行onTouchEvent 方法,處理事件,返回值告知系統event事件是否被消費
二、流程圖
1.Touch事件分發(dispatchTouchEvent)流程圖:
2.Touch事件傳遞機制(onInterceptHoverEvent)流程圖:
3.Touch事件處理(onTouchEvent)流程圖:
三、和onTouch有關的方法
/**
* 分發事件的方法,最早執行
* @param ev 事件
* @return 返回boolean值,true表示消息被分發出去
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
/**
* 是否中斷事件的傳遞
* 點擊事件從view最外層傳入內層
*
* @param event 事件
* @return result 返回true時,中斷事件,執行自己的onTouchEvent方法
* 返回false時,默認處理,不中斷,也不會執行自己的onTouchEvent方法
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return super.onInterceptTouchEvent(event);
}
/**
* 點擊事件解析處理
*
* @param event
* @return boolean值,true表示該事件被消費
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
四、在View,ViewGroup,Activity中以上方法的存在情況是不同的
下圖奉上View及其子類的繼承關係:
1.在View類中有下面兩種:
dispatchTouchEvent(MotionEvent ev);
onTouchEvent(MotionEvent ev);
2.在ViewGroup(佈局管理器是ViewGroup的子類,所以也繼承了這三種方法)中有以上三種方法:
dispatchTouchEvent(MotionEvent ev);
onInterceptTouchEvent(MotionEvent ev);
onTouchEvent(MotionEvent ev);
3.在Activity中有兩種:
dispatchTouchEvent(MotionEvent ev);
onTouchEvent(MotionEvent ev);
五、從屏幕點擊到事件的消費流程如下圖:
常用的MotionEvent事件:
- ACTION_DOWN = 0
- ACTION_UP = 1
- ACTION_MOVE = 2
- ACTION_CANCEL = 3