天天看點

android點滴之觸控相關知識點(持續更新)1.檢查目前螢幕有多少個觸摸點。2.多點觸控下,觸摸的狀态的檢測3.多點觸控下,每個觸點的分類處理4.多點觸控下的幾個特殊事件5.如何精确模拟一個手勢事件對象6.非精确模拟一個手勢事件對象7.模拟點選8.常用方法

使用MotionEvent的getPointerCount()方法。

MotionEvent類中方法getActionMasked(),這個方法可以檢查觸摸的狀态:

當隻有一個觸摸點時(隻用一根手指觸摸螢幕),按下是0,起來是1,移動是2;

當觸摸點多于1時(多根手指觸摸螢幕),按下是5,起來是6,移動是2;

多點觸摸時 假如是第i個點 int x = event.getX(i); int y = event.getY(i);則第i個點的坐标就是 P(x,y)

   通過event.getActionIndex()來得到觸控操作點的索引,也就是擷取目前這個動作是第幾個觸點。

MotionEvent.ACTION_POINTER_DOWN:當螢幕上已經有一個點被按住,此時再按下其他點時觸發。

MotionEvent.ACTION_POINTER_UP:當螢幕上有多個點被按住,松開其中一個點時觸發(即非最後一個點被放開時)。

該方法用來擷取一個模拟事件,參數意義為:】

參數1:downTime,使用者最初按下以啟動一連串的位置事件時的時間,這個時間值必須是從SystemClock的uptimeMillis()方法擷取到的才行。

參數2:eventTime,這個手勢事件建立的時間,這個時間值必須是從SystemClock的uptimeMillis()方法擷取到的才行。

參數3:action ,想要模拟動作的類型,比如:ACTION_DOWN等

參數4:pointerCount,這個時間中觸點的數目

參數5:pointerProperties,一個大小為pointerCount的數組,為每一個點提供PointerProperties類型的對象,這個對象必須包括點的标示符。

參數6:pointerCoords,一個大小為pointerCount的數組,為每一個點提供PointerCoords類型的對象

參數7:metaState,當事件形成時,起了作用的修飾鍵也叫元鍵,比如shift,ctrl,alt鍵,這些鍵的狀态

參數8:buttonState,被按下的按鈕的狀态

參數9:xPrecision,X坐标的精度

參數10:yPrecision,Y坐标的精度

參數11:deviceId,産生這個事件的裝置的id。如果是0表示事件不是一個實體裝置産生的,其他值都是任意的并且你不能依賴這些任意值

參數12:edgeFlags,一個位字段值,表明螢幕的哪個邊框,如果有的話,被這個手勢碰到了。

參數13:source,這個事件的源

參數14:手勢事件的标記

模拟一個MotionEvent對象,這裡我們使用MotionEvent的obtain()方法,參數如下

在螢幕中間模拟一次ACTION_DOWN事件

另外你要模拟滑動事件則模拟成MotionEvent.ACTION_MOVE即可

Android多點觸控

event.getAction() //擷取觸控動作比如ACTION_DOWN

event.getPointerCount(); //擷取觸控點的數量,比如2則可能是兩個手指同時按壓螢幕

event.getPointerId(nID); //對于每個觸控的點的細節,我們可以通過一個循環執行getPointerId方法擷取索引

event.getX(nID); //擷取第nID個觸控點的x位置

event.getY(nID); //擷取第nID個點觸控的y位置

event.getPressure(nID); //LCD可以感應出使用者的手指壓力,當然具體的級别由驅動和實體硬體決定的

event.getDownTime() //按下開始時間

event.getEventTime() // 事件結束時間

event.getEventTime()-event.getDownTime()); //總共按下時花費時間

getX()和getRawX()的差別

getX()是表示Widget相對于自身左上角的x坐标,而getRawX()是表示相對于螢幕左上角的x坐标值(注意:這個螢幕左上角是手機螢幕左上角,不管activity是否有titleBar或是否全螢幕),getY(),getRawY()一樣的道理

當用于觸控時:

getRowX:觸摸點相對于螢幕的坐标

getX:觸摸點相對于按鈕的坐标

getTop:按鈕左上角相對于父view(LinerLayout)的y坐标

getLeft:按鈕左上角相對于父view(LinerLayout)的x坐标

繼續閱讀