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

來源:互聯網
上載者:User

標籤:觸控   多點觸摸   觸控螢幕   

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座標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.