使用TouchDelegate擴(kuò)大控件的點(diǎn)擊范圍

當(dāng)我們的控件太小,導(dǎo)致我們無法準(zhǔn)確的點(diǎn)擊,這時(shí)候我們可以在在外面再加一層布局,但這樣性能不太好,或者加上padding,但影響這個(gè)UI布局。這時(shí)候我們可以TouchDelegate擴(kuò)大控件的點(diǎn)擊范圍。

我們都知道Android觸屏事件是在視圖樹中傳遞的,ViewGroup決定是否攔截觸屏事件,如果攔截就自己處理,如果不攔截就傳遞給子視圖,子視圖如果是ViewGroup會(huì)經(jīng)歷同樣的邏輯。子視圖是View(這里特指不能包含子視圖的View)就只能在自己的onTouch或者onTocuhEvent中處理,并返回ture或者false來告訴父視圖處理完沒有。

子View處理過程中也有onTouch和onTouchEvent兩個(gè)方法,它們也是有先后順序的,如下代碼,在View.java中的dispatchTouchEvent方法中:

如果View設(shè)置了onTouchListener,那么則先執(zhí)行onTouch方法,如果返回true,上述代碼result就是true,那么onTouchEvent就不會(huì)執(zhí)行,反之,會(huì)繼續(xù)執(zhí)行onTouchEvent。

在onTouchEvent方法中,如果TouchDelegate不為null并且它的onTouchEvent返回true了,那么當(dāng)前的onTouchEvent就返回true,不再執(zhí)行onTouchEvent后續(xù)邏輯。

下面我們看TouchDelegate這個(gè)類源碼:


構(gòu)造方法



事件處理方法

下面我們用代碼舉例:



可以運(yùn)行驗(yàn)證結(jié)果。

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

相關(guān)閱讀更多精彩內(nèi)容

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