Touchevent 中,返回值是 true ,則說(shuō)明消耗掉了這個(gè)事件,返回值是 false ,則沒(méi)有消耗掉,會(huì)繼續(xù)傳遞下去,這個(gè)是最基本的。
在 View 中跟 Touch 相關(guān)的事件有 dispatchTouchEvent , interceptTouchEvnet , onTouchEvent 三種。 dispatchTouchEvent 是負(fù)責(zé)分發(fā)事件的,事件從 activity 傳遞出來(lái)之后,最先到達(dá)的就是最頂層 view 的 dispatchTouchEvent ,然后它進(jìn)行分發(fā),如果返回 false ,則交給這個(gè) view 的 interceptTouchEvent 方法來(lái)決定是否要攔截這個(gè)事件,如果 interceptTouchEvent 返回 true ,也就是攔截掉了,則交給它的 onTouchEvent 來(lái)處理,如果 interceptTouchEvent 返回 false ,那么就傳遞給子 view ,由子 view 的 dispatchTouchEvent 再來(lái)開(kāi)始這個(gè)事件的分發(fā)。
如果事件傳遞到 某一層的子 view 的 onTouchEvent 上了,這個(gè)方法返回了 false ,那么這個(gè)事件會(huì)從這個(gè) view 往上傳遞,都是 onTouchEvent 來(lái)接收。而如果傳遞到最上面的 onTouchEvent 也返回 false 的話,這個(gè)事件就會(huì)“消失”,而且接收不到下一次事件。(我說(shuō)的一次事件指的是 down 到 up 之間的一系列事件)
注:上半部分為父View,下半部分為子View;
完整的傳遞流程為:父View->子View->子View的子View->……->子View的子View->子View->父View。
如果整個(gè)流程中都沒(méi)有處理掉這個(gè)事件,即所有處理的返回值均為false,則不會(huì)再傳遞下一次事件,因?yàn)樗麜?huì)認(rèn)為你這次的事件阻塞了,沒(méi)必要給下一次。
onTouchEvent如果不消耗的話,會(huì)從子view傳遞到父view。
posted on 2011-09-10 11:33
小果子 閱讀(304)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Android & Ios