一直以來,都被Android中的事件傳遞和處理機制深深的困擾!今天特意來好好的探討一下。現在的感覺是,只要你理解到位,其實事件的傳遞和處理機制並沒有想象中的那麼難。總之,不要自己打擊自己,要相信自己能掌握這塊知識。好了,下面是我今天的收獲,希望也能對你有一點幫助。
一、擬人化來理解android中的事件機制
其實android中的事件傳遞與處理機制跟我們生活中的事件處理是一樣的。這裡有一個生活中的例子,很能說明這個問題。闡述如下:
你是一個公司的員工,你的上頭有一個主管,主管上頭呢還有一個經理。為了簡單,你們這個團隊就有這三個人。那麼如果上頭安排一件事下來要處理,流程是怎樣的呢?
顯然應該是由你的經理將這件事安排給你的主管來處理,你的主管再將這件事安排給你來處理。等你把這件事辦好了,你就應該給你的主管報告,再由你的主管來向你的經理
報告。顯然,你的主管和經理也有處理這件事的權限,如果他們覺得事情很復雜,你辦不了,或者他們比較照顧下級,可能就自己把這件事給辦了,這個時候這件事就不會再
傳遞給下一級來處理了。這個事件處理的過程,是不是太容易理解了!
其實android中的事件處理流程就是跟生活中的事件處理是一樣的。比如你在ViewGroupA中嵌套了一個VewiGroupB,然後又在ViewGroupB中嵌套了一個MyView。那麼一個觸摸事件傳遞過來,會發生什麼情況呢?類比上面的公司員工的處理事件,顯然會發生下面的過程:
觸摸事件傳遞過來後,ViewGroupA一看自己裡面還有一個員工可以利用,就是ViewGroupB,那不用白不用,就會把這個事件傳遞給ViewGroupB,告訴他,你給我把這個事件處理了!
ViewGroupB呢一看,我不怕,我裡面也有一個員工就是MyView,它得給我干活,於是又會把這個事件傳遞給MyView,讓它來處理。MyView一看,沒辦法啊,我手底下沒有員工了,那怎麼辦,我只能自己處理了(前提是它有處理這個事件的能力),所以就把這個觸摸事件給處理了。處理完成後呢?MyView就是給ViewGroupB報告,我已經把事情辦好了,你來審核一下,看看辦理的咋樣。ViewGroupB一審核,覺得不錯,就再將結果呈現給ViewGroupA。ViewGroupA再審核,通過了才算通過。在這個過程中,也可能出現幾種情況:
(1)MyView說,完蛋了,這事我的能力辦不好啊,於是就向VeiwGroupB報告,我沒有處理,請你來處理,你是我上司,能力比我強。於是ViewGroupB就會來幫忙處理。當然了,如果ViewGroupB也沒能力處理,那就只能反饋給VeiwGroupA,讓它來消化這個事件。
(2)也可能MyView處理非常完美,向ViewGroupB一報告,ViewGroupB一開心就說不用再交給ViewGroupA審核了,我擔保通過,於是事件到此直接終止。
上面用很形象的話來講adnroid中的事件傳遞和處理機制講解了一下。android用下面的幾個方法將上面的過程完美封裝了:
在ViewGroup中,有下面三個方法:
(1)dispatchTouchEvent 該方法用來分發事件,一般不會重寫這個方法
(2)onInterceptTouchEvent 用來攔截事件
(3)onTouchEvent 用來處理事件,這個方法應該大家很常見了吧
而View中,只有兩個方法,即:
(1)dispatchTouchEvent 該方法用來分發事件,一般不會重寫這個方法
(2)onTouchEvent 用來處理事件,這個方法應該大家很常見了吧
那麼我們就來寫一個實際的代碼,來驗證一下這些方法都對應上面的哪些過程。這樣子就會對這個些方法有更透徹的理解。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-11/125392p2.htm