[英]GestureDetector Multi-touch
我正在使用OnGestureListener
接口和GestureDetector
在 Android 中處理觸摸手勢。
我制作了一個應用程序來測試檢測兩個手指是否有效,在onFlp(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)
,我打印了不同MotionEvents
的 ID,但這些 ID 是相同的(顯然只檢測到一個手指)。
GestureDetector
是否支持多點觸控事件?
問題
默認情況下似乎沒有實現使用OnGestureListener
檢測多點觸控手勢。
您可能嘗試過的第一件事是讀取event.pointerCount
以獲取屏幕上手指的數量。 但是,這將等於1
。 這是因為您(很可能)永遠無法在完全相同的毫秒內用兩個手指觸摸屏幕。
修復它
您必須緩沖pointerCount
(屏幕上的手指數量)。 首先在您打算在其中跟蹤手勢的上下文中的某處添加這些變量:
// track how many fingers are used
var bufferedPointerCount = 1
var bufferTolerance = 500 // in ms
var pointerBufferTimer = Timer()
然后,在onTouchEvent(event: MotionEvent)
函數中,添加以下內容:
// Buffer / Debounce the pointer count
if (event.pointerCount > bufferedPointerCount) {
bufferedPointerCount = event.pointerCount
pointerBufferTimer = fixedRateTimer("pointerBufferTimer", true, bufferTolerance, 1000) {
bufferedPointerCount = 1
this.cancel() // a non-recurring timer
}
}
本質上,這會跟蹤顯示器上手指的最大數量,並使其在bufferTolerance
毫秒內有效(此處為:500)。
我目前正在我創建的自定義 Android Launcher 中實現它( finnmglas/Launcher | 請參閱相關問題)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.