面試中的問題往往實際開發中用不到,但是還都愛問,所以如何用自己的語言表達出來就非常重要,但是語言邏輯能記住一時,下次面試時又忘了,所以整理出來以免需要時還要重新 整理。如有不對歡迎指正。新司機上路多多關照。
關於事件分發機制的回答,個人理解應從以下幾個方面入手,兩個主體,三個方法,事件序列,優先順序。
touch事件分發中只有兩個主角:viewgroup和view。viewgroup包含onintercepttouchevent、dispatchtouchevent、ontouchevent三個相關事件。view包含dispatchtouchevent、ontouchevent兩個相關事件。ontouchevent 和onintercepttouchevent都是在dispatchtouchevent內部處理的。當dispatchtouchevent執行時首先判斷是否攔截,預設不攔截(onintercepttouchevent返回false),會呼叫子view的dispatechtouchevent繼續向下分發,如過攔截則呼叫自己的ontouchevent去考慮是否處理,如果所有子view的ontouchevent都返回false,則考慮viewgroup的ontouchevent是否會處理,如果都不處理,會一層一層向外傳到activity,由activity去處理。當ontouchevent返回true時,這個事件被消耗,這裡有乙個事件序列的問題,包括down,move,up,down事件分發到這個view被消耗指的是down事件被消耗,move,up也直接分發到這裡。但不一定消耗。還有乙個ontouch方法和ontouchevent優先順序問題,在一些監聽(比如onclicklisternner,ontouchlistenner)中會重寫ontouch方法,這個方法也可以消耗事件,這個優先順序要高於ontouchevent。
Android開發坑系列 之事件分發機制
總結一下 事件序列的定義 從手觸控螢幕 含 到離開螢幕 含 期間所發生的一系列互動事件。主要由action down action move actoin up action cancel 等組成,其中一次事件序列中,down和up都只有最多乙個,move有若干個,可以為0個。定律 某個view只有...
android複習路之事件分發機制篇
最近看了很多關於事件分發機制的文章下面對事件分發機制進行乙個總結純理論性的 事件攔截機制有三種ondispatchtouchevent 攔截,onintercepttouchevent 攔截,ontouchevent 攔截。所有的方法在後面會有圖進行展示。1.ondispatchtouchevent...
Cocos2d x之事件分發機制
eventdispatch事件分發是響應使用者事件的機制,基本組成 事件 封裝了我們事件的處理 事件分發器通知使用者事件的 事件物件包含事件的資訊 有五種事件 eventlistenertouch 響應touch觸控事件 eventlistenerkeyboard 響應鍵盤事件 eventliste...