Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android點滴之觸控相關知識點(持續更新)

android點滴之觸控相關知識點(持續更新)

編輯:關於Android編程

1.檢查當前屏幕有多少個觸摸點。

使用MotionEvent的getPointerCount()方法。

2.多點觸控下,觸摸的狀態的檢測

MotionEvent類中方法getActionMasked(),這個方法可以檢查觸摸的狀態:
當只有一個觸摸點時(只用一根手指觸摸屏幕),按下是0,起來是1,移動是2;
當觸摸點多於1時(多根手指觸摸屏幕),按下是5,起來是6,移動是2;

3.多點觸控下,每個觸點的分類處理

多點觸摸時 假如是第i個點 int x = event.getX(i); int y = event.getY(i);則第i個點的坐標就是 P(x,y)
通過event.getActionIndex()來得到觸控操作點的索引,也就是獲取當前這個動作是第幾個觸點。

4.多點觸控下的幾個特殊事件

MotionEvent.ACTION_POINTER_DOWN:當屏幕上已經有一個點被按住,此時再按下其他點時觸發。
MotionEvent.ACTION_POINTER_UP:當屏幕上有多個點被按住,松開其中一個點時觸發(即非最後一個點被放開時)。

5.如何精確模擬一個手勢事件對象

static public MotionEvent obtain(long downTime, long eventTime,
            int action, int pointerCount, PointerProperties[] pointerProperties,
            PointerCoords[] pointerCoords, int metaState, int buttonState,
            float xPrecision, float yPrecision, int deviceId,
            int edgeFlags, int source, int flags) {
        MotionEvent ev = obtain();
        ev.mNativePtr = nativeInitialize(ev.mNativePtr,
                deviceId, source, action, flags, edgeFlags, metaState, buttonState,
                0, 0, xPrecision, yPrecision,
                downTime * NS_PER_MS, eventTime * NS_PER_MS,
                pointerCount, pointerProperties, pointerCoords);
        return ev;
    }

該方法用來獲取一個模擬事件,參數意義為:】 參數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:手勢事件的標記

6.非精確模擬一個手勢事件對象

模擬一個MotionEvent對象,這裡我們使用MotionEvent的obtain()方法,參數如下
MotionEvent.obtain(downTime, eventTime, action, x, y, metaState);

7.模擬點擊

在屏幕中間模擬一次ACTION_DOWN事件
另外你要模擬滑動事件則模擬成MotionEvent.ACTION_MOVE即可
onTouch(mPageView, MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, screenWidth / 2, screenHeight / 2, 0));


8.常用方法

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坐標
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved