繁体   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