轉載請注明出處:http://blog.csdn.net/a1018998632/article/details/50571486
看了郭霖大神:android事件分發機制。還有我之前轉過的一篇 :View事件的傳遞。感覺受益匪淺。是以想寫點什麼來總結一下。
首先是事件分發的幾個背景:
背景1:傳遞函數: dispatchTouchEvent。用于傳遞事件,本函數被定義在View中,ViewGroup重寫了該函數。
背景2:攔截函數:onInterceptTouchEvent。用于攔截事件,本函數被定義在ViewGroup中。
背景3:消費函數1:onTouch。用于傳遞過來的事件消費掉,本函數是OnTouchLisener裡面的需要被重寫的函數。
背景4:消費函數2:onTouchEvent。同用于消費事件,本函數被定義于View中,比onTouch晚執行一步,可能不會執行。
源代碼和語言上的解析:郭霖大神已經分析的很完美了:奉上連結大家可以去看看
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153761
我則将事件分發機制做成了一張圖:大家可以結合上面兩篇部落格和我之前轉載的一篇部落格看看:http://blog.csdn.net/a1018998632/article/details/50569113
幾個總結:
1.onClick在onTouch之後調用
2.onTouch預設flase
3.一般情況,事件是先傳到最底層的子view,若子View不可點選,單機,長按則将事件傳回給上一層,否則事件消耗。或者将onTouch指定為true,将事件消耗。
參考文獻:
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153761
http://blog.csdn.net/a1018998632/article/details/50569113
http://my.oschina.net/banxi/blog/187267