在开发的时候遇见一个小需求,就是优先识别双击手势而忽略单击,因为普通的事件会发生混乱,所以我们这个时候就需要一个小技巧就是GestureGroup。
组合手势(GestureGroup)允许开发者在应用中实现复杂的手势识别逻辑。
其中互斥识别模式(Exclusive)是其中的一种模式,它特别适用于需要区分细微差别的手势操作,如单击和双击。这种模式确保在一组手势中,一旦一个手势被识别,其他手势将不再被考虑。这是通过优先级和识别顺序来控制的。在这种模式下,手势组按照定义时的顺序进行检测,一旦一个手势被成功识别,其他手势则自动被忽略。
示例:单击与双击的互斥
若双击手势放置在单击手势之前,系统首先尝试识别双击。如果用户实际执行了双击操作,则在第二次点击时双击手势会被确认,单击手势不会被触发。相反,如果单击手势被放在双击手势之前,那么在用户尚未完成双击的第二次点击前,单击手势可能已被识别,导致双击手势无法被触发。
下面就是一个应用中设置互斥识别模式的一个示例代码片段:
@Entry
@Component
struct TapGestureExample {
build() {
Column() {
Text('Click twice').fontSize(28)
.gesture(GestureGroup(GestureMode.Exclusive,
// 双击放在前面
TapGesture({ count: 2 })
.onAction((event?: GestureEvent) => {
console.log('双击')
}),
TapGesture({ count: 1 })
.onAction((event?: GestureEvent) => {
console.log('单击')
})
))
}
}
}
在使用的时候的几点注意事项,
1)在互斥模式下,将具有更多触点或更复杂条件的手势放在前面。
2)考虑实际的用户操作习惯,优化手势响应逻辑,避免用户感觉到操作的不连贯或反应迟缓。
3)在真实设备上多次测试手势识别的准确性和响应速度,根据测试结果调整手势识别的敏感度和顺序。
又解决了一个小问题~!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。