Android事件觸發(fā)機(jī)制

事件分發(fā)分捕獲和執(zhí)行兩個(gè)階段

事件傳遞,即捕獲,就是執(zhí)行dispatchTouchEvent()方法,再執(zhí)行onInterceptTouchEvent()方法。
事件處理就是執(zhí)行onTouchEvent()方法。

事件的返回值含義:
當(dāng)事件在傳遞的過程中,返回值:True,攔截,不繼續(xù);False,不攔截,繼續(xù)流程,傳遞給下一級(jí)。
當(dāng)事件在處理的過程中,返回值:True,處理了,不用審核了;False,交給上一級(jí)處理。

對(duì)于ViewGroup,需要重寫三個(gè)方法:

@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
    Log.d(TAG, "ViewGroup dispatchTouchEvent" + event.getAction());
    return super.dispatchTouchEvent(event);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event)
{
    Log.d(TAG, "ViewGroup onInterceptTouchEvent" + event.getAction());
    return super.onInterceptTouchEvent(event);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    Log.d(TAG, "ViewGroup onTouchEvent" + event.getAction());
    return super.onTouchEvent(event);
}

對(duì)于View,需要重寫如下兩個(gè)方法:

@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
    Log.d(TAG, "View dispatchTouchEvent" + event.getAction());
    return super.dispatchTouchEvent(event);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    Log.d(TAG, "View onTouchEvent" + event.getAction());
    return super.onTouchEvent(event);
}
  1. dispatchTouchEvent(...):
    作用:決定事件是否由onInterceptTouchEvent攔截處理;
    當(dāng)返回super.dispatchTouchEvent(...)時(shí),由onInterceptTouchEvent來決定事件的流向,onInterceptTouchEvent返回值為false時(shí),繼續(xù)向子View分發(fā)事件,本View只處理ACTION_DOWN事件。
    當(dāng)onInterceptTouchEvent返回值為true時(shí),不繼續(xù)向子View分發(fā)事件,本View處理所有事件。

  2. onInterceptTouchEvent(...):
    作用:攔截事件,決定是否將事件傳遞給子View;
    當(dāng)返回值為false時(shí),事件繼續(xù)傳遞給子View;
    當(dāng)返回值為true時(shí),事件交給onTouchEvent(...)處理,不再向子View傳遞。

  3. onTouchEvent(MotionEvent event):
    作用:事件最終到這個(gè)方法,由此方法處理事件;
    當(dāng)返回值為false時(shí),事件繼續(xù)向上傳遞給其父View的onTouchEvent()方法,直到根View的,一直傳遞到根View時(shí),返回值都是false,也就是說在事件傳遞過程中沒有View的onTouchEvent()方法返回true,此次手勢(shì)就會(huì)結(jié)束,此次事件就會(huì)被取消。
    當(dāng)返回值為true時(shí),此View處理所有事件,并且處理的事件不會(huì)再向上返回。也就是說在值為true時(shí),此手勢(shì)的所有事件都傳遞給此View的onTouchEvent()處理,包括ACTION_DOWN、ACTION_UP、ACTION_MOVE等事件。

參考
Android 事件響應(yīng)原理
Android事件分發(fā)原理分析

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容