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