我正在使用OnGestureListener
界面和GestureDetector
.
我制作了一个应用程序来测试检测两个手指是否有效,在 中onFlp(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)
,我打印了不同的 id,MotionEvents
但这些 id 是相同的(显然只检测到一个手指)。
是否GestureDetector
支持多点触控事件?
我正在使用OnGestureListener
界面和GestureDetector
.
我制作了一个应用程序来测试检测两个手指是否有效,在 中onFlp(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)
,我打印了不同的 id,MotionEvents
但这些 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 启动器中实现它(finnmglas/Launcher | 查看相关问题)