天天看點

Android事件機制之二:onTouch詳解

在其中對OntachEvent中的總結中,不是很具體。本文将主要對onTach進行總結。

ontach是Android系統中整個事件機制的基礎。Android中的其他事件,如onClick、onLongClick等都是以onTach為基礎的。

onTach包括從手指按下到離開手機螢幕的整個過程,在微觀形式上,具體表現為action_down、action_move和action_up等過程。

onTach兩種主要定義形式如下:

1.在自定義控件中,常見的有重寫onTouchEvent(MotionEvent ev)方法。如在開發中經常可以看到重寫的onTouchEvent方法,

并且其中有針對不同的微觀表現(action_down、action_move和action_up等)做出的相應判斷,執行邏輯并可能傳回不同的布爾值。

2.在代碼中,直接對現有控件設定setOnTouchListener監聽器。并重寫監聽器的onTouch方法。onTouch回調函數中有view和MotionEvent

參數,據此也可以針對不同的事件微觀表現作出不同的處理。

需要注意的是:整體上,事件的微觀表現遵循”事件傳遞和消費“一文,但是針對于action_down,需要有如下注意的地方:

1.在所有的事件微觀表現中,action_down是整個事件的基礎,是任何宏觀事件的起始事件,一旦action_down return false,表示事件繼續向外層冒泡,當有某一層的action_down

中return true,表示此層消費了此action_down事件,那麼在接下裡的action_move、action_up等事件中,将直接先傳入此層中,且不管action_move、

action_up等傳回false還是true,事件都不會繼續冒泡到外層。事件由此被消費掉。

2.由此可以得知,action_down在整個事件傳遞中的重要作用。如果某層發生了action_move或者action_up微觀事件,那麼一定發發生過action_down微觀事件。

關于setOnTouchListener、setOnClickListener和setOnLongClickListener:

Android中,有時候經常見到針對同一控件可能設定不同的事件監聽器(如setOnTouchListener、setOnClickListener和setOnLongClickListener),對于這些事件監聽器的執行順序,

setOnTouchListener是最先執行的。并且隻有當此空間完整走完action_down和action_up流程後,才可能調用performClick()方法,及調用onclick執行。而onLongClick則是在action_down

之後開始,并且是在一個新的線程中去判斷按壓的時間,條件滿足則調用performLongClick()函數,及調用onLongClick()函數。

---------------------------------------------------------------------------------

筆者水準有限,若有錯漏,歡迎指正,如果轉載以及CV操作,請務必注明出處,謝謝!

本文轉自Windstep部落格園部落格,原文連結:http://www.cnblogs.com/lwbqqyumidi/p/3609006.html,如需轉載請自行聯系原作者

繼續閱讀