Android多點觸控技術跟Linux輸入子系統緊密相關,
Android多點觸控技術和應用框架
。本文將從應用的角度說明Android多點觸控技術的接口和應用。一、多點觸控場景分析
網絡上有關Android多點觸控技術的文章多見于兩點拉伸進行圖片放大縮小。對于,這個場景有兩個特點:
1)兩點,而不是更多點;
2)對于觸點的移動事件(MotionEvent.ACTION_MOVE),只需要計算兩點的距離,進而判斷兩個點之間的距離是變大還是縮小,實現圖片放大或者縮小。
這個過程并不需要記錄這兩個點和之前的兩個點的關系。這樣講比較抽象,我們可以用一個例子來解釋。如下圖:
假設一個人拿著5支筆同時寫linux這個單詞的一個字母,那就得知道當前的5個觸點里面的每個觸點和之前的觸點的對應關系,才能做到一支筆畫一個字母。
這個場景基本上能夠覆蓋到android多點觸控的所有接口的應用了。我們先來介紹接口,最后給出多點觸控的應用框架,它理論上可以處理很多點的觸控,而不僅僅是2點或者5點。
二、Android多點觸控接口
1.onTouchEvent
重載Activity的onTouchEvent接口以處理觸控信息。
public booleanonTouchEvent(MotionEvent event)
2.event.getAction
該接口與MotionEvent.ACTION_MASK想與可以得到觸控按鍵的類型,如按下、彈起和移動。
1)MotionEvent.ACTION_DOWN 第一個觸控點按下,
電腦資料
《Android多點觸控技術和應用框架》(http://salifelink.com)。2)MotionEvent.ACTION_POINTER_DOWN 屏幕上已經有1個或者多個觸點的情況下再按下一個點。
3)MotionEvent.ACTION_UP 最后一個觸點彈起
4)MotionEvent.ACTION_POINTER_UP 非最后一個觸點彈起。
5)MotionEvent.ACTION_MOVE 觸點移動事件
3.event.getActionIndex()
獲得觸控點的索引,其代表觸控點在所有觸控點中的序號。例如A、B、C三個點依次按下,那么分別對應的index是0、1、2。假設B點彈起,此時A、C的index將是0、1。這時假如新按一個點D,那A、C、D的index將是0、1、2。
從中我們發現,C點的index會因為其他點的彈起而變化。所以不能用該值來跟蹤同一個點。
4.event.getPointerId(actionIndex)
通過觸控點索引來獲得觸控點的唯一標識。其自觸點被按下開始,直到彈起,該值都不會發生變化,其是觸點的一個身份ID。例如A、B、C三個點依次按下,那么分別對應的ID是0、1、2。假設B點彈起,此時A、C的ID依然是0、2。這時假如新按一個點D,那A、C、D的ID將是0、2、1。新增的觸點的ID會從0開始遞增,發現未用值即拿來用。
5.獲得觸點坐標
event.getX(actionIndex)、event.getY(actionIndex)獲得觸點距離所屬的View的坐標。event.getRawX(actionIndex)、event.getRawY(actionIndex)獲得觸點距離屏幕左上角的坐標。
三、多點觸控應用框架