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