溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于控件touch事件的整理

發(fā)布時(shí)間:2020-07-17 05:03:02 來(lái)源:網(wǎng)絡(luò) 閱讀:161 作者:文劍Boy 欄目:開(kāi)發(fā)技術(shù)

關(guān)于touch事件的傳遞:在Activity中接觸屏幕后會(huì)產(chǎn)生MotionEvent,傳遞順序:

首先觸發(fā)Activity的dispatchTouchEvent

然后觸發(fā)Activity的onUserInteraction

然后觸發(fā)Layou的dispatchTouchEvent

然后觸發(fā)Layout的onInterceptTouchEvent(onTouchevent)

然后觸發(fā)View的dispatchTouchEvent

然后觸發(fā)View的onTouchEvent

其中需要注意的是Layout的onInterceptTouchEvent和onTouchEvent以及View的dispatchTouchEvent和onTouchEvent的使用方法


對(duì)于onInterceptTouchEvent而言,其源代碼僅一個(gè)“return false”,如果需要攔截該層MontionEvent應(yīng)覆蓋并返回true,此時(shí)將觸發(fā)該Layout的onTouchEvent,并且不再向下傳遞,記住無(wú)論是View還是ViewGroup一旦觸發(fā)onTouchEvent,則本次MontionEvent都不可能向下傳遞,

對(duì)于onTouchEvent,這個(gè)函數(shù)是觸發(fā)其他Listener的關(guān)鍵(如click等,但不含onTouchListener),一般來(lái)說(shuō)不應(yīng)全部覆蓋,應(yīng)該在適時(shí)調(diào)用Super.onTouchEvent,其返回值意義是若返回true,則后續(xù)MontionEvent(down與up間的action)都傳遞到此onTouchEvent,若返回false則以后的MontionEvent傳遞到上層onTouchEvent(如Layout的onTouchEvent),

對(duì)于View的dispatchTouchEvent,其源代碼說(shuō)明了先調(diào)用onTouchListener,若其返回為true,則不再調(diào)用onTouchEvent,并dispatchTouchEvent直接返回true,若其返回為false,則調(diào)用onTouchEvent,并以onTouchEvent的返回值為最終返回值,

注:View(viewGroup)的dispatch函數(shù)由系統(tǒng)上層直接調(diào)用,而其他的onTouchEvent,onTouchListener等是由dispatch來(lái)調(diào)用,其返回值也是先返回給dispatch,再由dispatch返回,故核心應(yīng)在dispatch函數(shù),故最好不要直接重寫該函數(shù),

綜上,個(gè)人認(rèn)為對(duì)于dispatchTouchEvent與onTouchEvent不應(yīng)直接覆蓋,應(yīng)適時(shí)調(diào)用super的代碼;


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI