HarmonyOS中如何进行手势响应控制?

阅读 224
avatarAI BotBETA

在HarmonyOS中,进行手势响应控制主要涉及以下几个方面:

一、事件响应链收集

  1. 触摸事件:是用户与设备交互的基础,包括Down、Move、Up、Cancel四种类型。手势由触摸事件组成,例如点击为Down+Up,滑动为Down+一系列Move+Up。
  2. 事件分发:由触摸测试结果决定,其结果会直接决定哪些控件的事件加入事件响应链,并最终按照响应链顺序判定是否消费。
  3. 响应链收集:根据右子树(按组件布局的先后层级)优先的后序遍历流程。例如,用户触摸动作发生在某个组件上时,事件会从该组件开始往上传,直到被消费或者丢弃,允许多个组件同时触发。

二、手势响应优先级

  1. 系统手势:系统控件默认实现的手势,如拖拽、onClick等。
  2. 自定义手势:通过绑定手势API实现的手势,如使用gesture声明的事件回调。
  3. 优先级规则

    • 当父组件和子组件绑定同类型的手势时,子组件会优先识别绑定的手势。
    • 当同一个组件同时绑定多个手势时,先达到手势触发条件的手势优先触发。
    • 当同一个组件绑定相同事件类型的系统手势和自定义手势时,系统手势会优先响应。

三、手势响应控制方法

  1. 设置绑定手势方法

    • 常规手势绑定方法(gesture):默认优先级。
    • 带优先级手势绑定方法(priorityGesture):设置不同优先级。
    • 并行手势绑定方法(parallelGesture):允许多个手势同时触发。
  2. 手势组合

    • 通过GestureGroup属性,给同一个组件添加多个手势,支持连续识别、并行识别和互斥识别模式。
  3. 独占控制

    • 使用monopolizeEvents属性设置组件是否独占事件。先响应事件的控件作为第一响应者,在手指离开屏幕前其他组件不会响应任何事件。
  4. 自定义手势判定

    • 使用onGestureJudgeBegin方法对手势进行判定,开发者可以根据自身业务逻辑选择是否响应自定义手势。
  5. 手势拦截

    • 将系统内置手势和响应链上更高优先级的手势做并行化处理,并可以动态控制手势事件的触发。

综上所述,HarmonyOS中的手势响应控制涉及事件响应链的收集、手势响应优先级的设定以及多种手势响应控制方法的应用。开发者可以根据具体业务需求,灵活运用这些技术和方法来实现复杂的手势交互功能。

1 个回答
  • 手势绑定,设置绑定手势的方法可以实现在多层级场景下,当父组件与子组件绑定了相同的手势时,设置不同的绑定手势方法有不同的响应优先级。手势绑定支持常规手势绑定方法(gesture)、带优先级手势绑定方法(priorityGesture)、并行手势绑定方法(parallelGesture)。
  • 独占事件控制,通过monopolizeEvents属性设置组件是否独占事件,事件范围包括组件自带的事件和开发者自定义的点击、触摸、手势事件。先响应事件的控件作为第一响应者,在手指离开屏幕前其他组件不会响应任何事件。在一个窗口内,设置了独占控制的组件上的事件如果首先响应,则本次交互只允许此组件上设置的事件响应,窗口内其他组件上的事件不会响应。如果开发者通过parallelGesture绑定了与子组件同时触发的手势,如PanGesture,子组件设置了独占控制且首个响应事件,则父组件的手势不会响应。
  • 自定义手势判定,为组件提供自定义手势判定能力。开发者可根据需要,在手势识别期间,根据自己的业务逻辑来决定是否响应手势。使用onGestureJudgeBegin方法对手势进行判定,开发者可以根据自身业务逻辑,选择是否响应自定义手势。
  • 手势拦截增强,为组件提供手势拦截能力。开发者可根据需要,将系统内置手势和响应链上更
  • responseRegion和hitTestBehavior,影响触摸测试的因素同样也可能会影响到手势的响应流程。例如responseRegion属性和hitTestBehavior属性可以控制Touch事件的分发,从而可以影响到onTouch事件和手势的响应。而绑定手势方法属性可以控制手势的竞争从而影响手势的响应,但不会影响到onTouch事件。
  • ArkUI组件自身的属性控制手势响应,ArkUI组件自身的属性,也可以对手势事件的响应做出控制。例如Grid、List、Scroll、Swiper、WaterFlow等滚动容器组件提供了nestedScroll属性,来解决和父组件的嵌套滚动的冲突问题;例如Swiper组件的disableSwipe可以设置禁用组件滑动切换的功能;又例如List组件可以通过设置enableScrollInteraction属性来设置是否支持手势滚动列表。
    本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏