如何在Flutter中检测多个触摸?

e4eetjau  于 2023-06-07  发布在  Flutter
关注(0)|答案(2)|浏览(408)
  • 大家好 *

我对Flutter很陌生,想构建一个应用程序,它可以检测多个触摸,如果触摸持续时间较长,则在那里设置一个圆圈**。
与此类似的是应用程序**“Chwazi手指选择器”**在PlayStore中。这就是整个事情最终的样子。
你能告诉我我需要哪些组件吗?如果可能的话,建议一些代码。
我还没有找到一个答案,通过我的研究到目前为止,我希望你现在!

请帮帮我:)

hzbexzde

hzbexzde1#

检查GestureDetector小部件和那些可用的事件https://flutter.dev/docs/development/ui/advanced/gestures
然而,使用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)。

w41d8nur

w41d8nur2#

GestureDetector不检测多点触摸,除了预定义的手势,如缩放等
对于多点触摸,我使用类似于:

RawGestureDetector(
      gestures: {
        MultiTapGestureRecognizer: GestureRecognizerFactoryWithHandlers<MultiTapGestureRecognizer>(
          () => MultiTapGestureRecognizer(),
          (MultiTapGestureRecognizer instance) {
            instance.onTapDown =(pointer, details) {
              log( 'X=${details.localPosition.dx}  Y=${details.localPosition.dy}' )
            };
          },  
        ),
      },
      child:
        ...some content widget here,
    )
)

要检测每次触摸的结束,请使用onTapUp()

相关问题