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