HarmonyOS 鸿蒙Next OpenHarmony组合手势的顺序手势执行完毕,onCancel无法执行

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next OpenHarmony组合手势的顺序手势执行完毕,onCancel无法执行

gesture(GestureGroup(GestureMode.Sequence,
LongPressGesture({repeat:true})
.onAction((event:GestureEvent)=>{
if(event.repeat){
this.flag=true
}
})
,
PanGesture({direction:PanDirection.Horizontal})
.onActionUpdate((event:GestureEvent)=>{
if(event.offsetX>10){
console.log(“xiayige--------”)
}
})
).onCancel(()=>{
console.log("------------")
this.flag=false
})

5 回复
你好:

经调试发现,这里的onCancel()事件,是指顺序组合手势的执行被取消了,或者说中断了,才触发该事件的回调,属于一种异常状况的事件监听。
比如:在手势组中添加了两种手势,设置Sequence顺序识别,当只执行第一个手势就结束了,就触发onCancel()回调;如果两种手势都执行完了,则不会触发onCancel()回调。

日志:(只触发一种手势)
06-28 09:12:06.059 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功回调。flag = true
06-28 09:12:06.561 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功回调。flag = true
06-28 09:12:07.063 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功回调。flag = true
06-28 09:12:07.094 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功,手指抬起后触发回调。
06-28 09:12:07.395 6400 6400 I 02200/JsApp: xwl: 顺序组合手势(GestureMode.Sequence)取消后触发回调。flag = false

日志:(执行完手势组合)
06-28 09:11:34.373 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功回调。flag = true
06-28 09:11:34.875 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功回调。flag = true
06-28 09:11:34.991 6400 6400 I 02200/JsApp: xwl: LongPress手势识别成功,手指抬起后触发回调。
06-28 09:11:35.041 6400 6400 I 02200/JsApp: xwl: Pan手势识别成功回调。
06-28 09:11:35.058 6400 6400 I 02200/JsApp: xwl: Pan手势移动过程中回调。
06-28 09:11:35.075 6400 6400 I 02200/JsApp: xwl: 移动距离大于10vp回调
06-28 09:11:35.724 6400 6400 I 02200/JsApp: xwl: Pan手势移动过程中回调。
06-28 09:11:35.746 6400 6400 I 02200/JsApp: xwl: Pan手势识别成功,手指抬起后触发回调。

设备:wagner平板 3.1-release
API:9
楼主您好,这个问题已经反馈给研发,请您耐心等待一下。

组合手势,捏合手势、拖动手势顺序识别,为什么PinchGesture的onActionUpdate不会回调呢? 手势响应链: pinchGesture.onActionStart panGesture.onActionStart panGesture.onActionUpdate … panGesture.onActionEnd。 请问为什么,如何解决呢? API 12

欢迎开发小伙伴们进来帮帮楼主

在HarmonyOS鸿蒙Next OpenHarmony系统中,组合手势的识别与处理涉及复杂的逻辑判断与状态管理。当组合手势的顺序手势执行完毕后,onCancel方法未能执行,通常意味着手势识别流程中的某些状态未能正确更新或传递。

这种情况可能由以下几个原因引起:

  1. 手势识别器配置问题:检查手势识别器是否正确配置,包括手势的顺序、触发条件及终止条件。
  2. 事件传递机制:确认手势事件是否在所有相关组件间正确传递,特别是当手势跨越多个UI元素时。
  3. 状态管理:检查手势状态管理逻辑,确保在手势结束时正确更新状态,以触发onCancel
  4. 系统或框架Bug:如果以上均配置正确,可能是系统或框架层面的Bug。

针对此问题,建议首先核对手势识别器的配置与事件传递逻辑,确保无遗漏或错误。同时,查看最新的开发者文档或更新日志,确认是否存在已知问题或修复。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在那里,您可以获得更专业的技术支持与帮助。

回到顶部