多點觸控就是同時把一根以上的手指放在螢幕上。
再繼續往下以前需要補充一些名詞:
觸控手勢:就是把一根或者幾根手指放在螢幕上做各種動作,其中包括保留一根手指的前提下,拿起或者放下其餘的手指。
觸控事件:在觸控手勢中,有手指移動或者離開螢幕的時候就會引發一個觸控事件。這個事件就存放在<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,如需轉載請自行聯系原作者