我对Flutter很陌生,想构建一个应用程序,它可以检测多个触摸,如果触摸持续时间较长,则在那里设置一个圆圈**。与此类似的是应用程序**“Chwazi手指选择器”**在PlayStore中。这就是整个事情最终的样子。你能告诉我我需要哪些组件吗?如果可能的话,建议一些代码。我还没有找到一个答案,通过我的研究到目前为止,我希望你现在!
请帮帮我:)
hzbexzde1#
检查GestureDetector小部件和那些可用的事件https://flutter.dev/docs/development/ui/advanced/gestures然而,使用OnGestureListener来检测多点触摸手势似乎在默认情况下没有实现。您可能尝试过的第一件事是阅读event.pointerCount以获得屏幕上手指的数量。然而,这将等于1。这是因为你将(很可能)永远不能在完全相同的毫秒内用两个手指触摸屏幕。
GestureDetector
OnGestureListener
event.pointerCount
修复它
你必须缓冲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)。
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()
2条答案
按热度按时间hzbexzde1#
检查
GestureDetector
小部件和那些可用的事件https://flutter.dev/docs/development/ui/advanced/gestures然而,使用
OnGestureListener
来检测多点触摸手势似乎在默认情况下没有实现。您可能尝试过的第一件事是阅读
event.pointerCount
以获得屏幕上手指的数量。然而,这将等于1。这是因为你将(很可能)永远不能在完全相同的毫秒内用两个手指触摸屏幕。修复它
你必须缓冲pointerCount(屏幕上手指的数量)。首先,在您打算跟踪手势的上下文中的某个地方添加这些变量:
然后,在onTouchEvent(event:MotionEvent)函数,添加以下内容:
}
本质上,这会跟踪显示屏上的最大手指数量,并使其在bufferTolerance毫秒内保持有效(此处:500)。
w41d8nur2#
GestureDetector不检测多点触摸,除了预定义的手势,如缩放等
对于多点触摸,我使用类似于:
要检测每次触摸的结束,请使用onTapUp()