2

我正在使用OnGestureListener界面和GestureDetector.

我制作了一个应用程序来测试检测两个手指是否有效,在 中onFlp(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY),我打印了不同的 id,MotionEvents但这些 id 是相同的(显然只检测到一个手指)。

是否GestureDetector支持多点触控事件?

4

1 回答 1

0

问题

默认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 启动器中实现它(finnmglas/Launcher | 查看相关问题

于 2020-07-18T08:16:40.607 回答