天天看點

Android多點觸控手勢基礎處理多點觸控手勢

多點觸控就是同時把一根以上的手指放在螢幕上。

再繼續往下以前需要補充一些名詞:

觸控手勢:就是把一根或者幾根手指放在螢幕上做各種動作,其中包括保留一根手指的前提下,拿起或者放下其餘的手指。

觸控事件:在觸控手勢中,有手指移動或者離開螢幕的時候就會引發一個觸控事件。這個事件就存放在<code>MotionEvent</code>中。

在這個事件中,包含說與的觸控資料。

觸控:手指碰到螢幕的時候就産生了一個觸控(pointer)。

多個手指同時放在螢幕上的時候會觸發以下的系統事件:

ACTION_DOWN --第一個對螢幕的觸碰。這是多點觸控的開始。這個觸碰的而資料

儲存在index為0的<code>MotionEvent</code>中。

ACTION_POINTER_DOWN--其他對螢幕的觸碰。觸碰事件的index可以用方法<code>getActionIndex()</code>擷取到。

觸碰的資料儲存在這個index指定的<code>MotionEvent</code>中。

ACTION_MOVE--放在螢幕上的任何一根手指移動的時候觸發。

ACTION_POINTER_UP--第一個觸摸螢幕的手指以外的其他手指離開螢幕的時候觸發。

ACTION_UP--當最後一根手指離開螢幕的時候觸發。

你可以通過觸碰事件的index或者ID來獲得事件<code>MotionEvent</code>。

Index: 一個<code>MotionEvent</code>存儲了幾根手指觸摸螢幕的每一個手指的觸碰資料。一般處理觸摸

的是後都用index作為擷取<code>MotionEvent</code>的依據,而不是觸碰ID。

ID:整個多點觸摸事件過程中,每一個觸摸都有一個ID和整個觸摸比對。

一個觸碰的index在<code>MotionEvent</code>中可能發生改變的。而整個觸碰的ID是保持不變的,隻要整個

觸碰保持激活狀态。用<code>getPointerId()</code>可以擷取整個手勢執行期間的每一個event裡的觸碰資料。

也可以通過<code>findPointerIndex()</code>來根據一個觸控的ID來擷取這觸控在觸控事件中的index。比如:

你應該使用<code>getActionMasked()</code>(或者從相容方面考慮的話用<code>MotionEventCompat.getAtionMasked()</code>來擷取

<code>MotionEvent</code>的action。與<code>getAction()</code>不同,<code>getActionMasked()</code>就是被用來處理多點觸控的。

這個方法的傳回值不在包含觸控index的位數。你可以用<code>getActonIndex()</code>來擷取觸控action的index。這些在後面詳細叙述。

代碼都是用Kotlin寫的,自從用了這個語言就再也不想用Java了。對于Java開發者了解Kotlin的代碼沒有什麼太大的問題,基本上都一樣。

歡迎加群互相學習,共同進步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,轉載請注明出處!

本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/sunshine-anycall/p/5245293.html,如需轉載請自行聯系原作者

繼續閱讀