Android事件機制之二:onTouch詳解


《Android事件機制之一:事件傳遞和消費》一文總結了Android中的事件傳遞和消費機制。

在其中對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

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

對於這兩種方式的區別,可以參見:http://blog.csdn.net/guolin_blog/article/details/9097463 一文。

同時,推薦另外一篇博客:http://blog.csdn.net/guolin_blog/article/details/9153747 。

需要注意的是:整體上,事件的微觀表現遵循”事件傳遞和消費“一文,但是針對於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()函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM