【问题标题】:GestureDetector Multi-touchGestureDetector 多点触控
【发布时间】:2013-10-31 13:11:07
【问题描述】:

我正在使用OnGestureListener 界面和GestureDetector 在Android 中处理触摸手势。

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

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

【问题讨论】:

  • 手机支持多点触控吗?
  • 是的,但是我不能用这个界面管理多个手指。

标签: android gesture multi-touch


【解决方案1】:

问题

使用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 | 请参阅 related issue)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2012-08-11
    • 2012-10-17
    相关资源
    最近更新 更多