onTouch事件的傳遞機制

onTouch事件的傳遞機制

一、點擊事件傳遞機制:

  • 1.view執行dispatchTouchEvent 方法,開始分發事件,返回值決定是否分發出去
  • 2.執行onInterceptHoverEvent 方法,判斷是否中斷事件,返回值決定是否傳遞給子View
  • 3.執行onTouchEvent 方法,處理事件,返回值告知系統event事件是否被消費

二、流程圖

1.Touch事件分發(dispatchTouchEvent)流程圖:

dispatchTouchEvent

2.Touch事件傳遞機制(onInterceptHoverEvent)流程圖:

onInterceptHoverEvent

3.Touch事件處理(onTouchEvent)流程圖:

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及其子類的繼承關係:
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);

五、從屏幕點擊到事件的消費流程如下圖:

onTouch

常用的MotionEvent事件:

  • ACTION_DOWN = 0
  • ACTION_UP = 1
  • ACTION_MOVE = 2
  • ACTION_CANCEL = 3
發佈了36 篇原創文章 · 獲贊 20 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章