天天看點

Android事件分發機制簡述

轉載請注明出處: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

Android事件分發機制簡述

幾個總結:

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