簡體   English   中英

GestureDetector 多點觸控

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM