HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别

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

HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别

  • 请问在ArkUI开发中,如何为组件添加触摸事件监听,并识别和处理不同的手势(如滑动、点击、长按等)?


更多关于HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

补充个demo

// xxx.ets
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) offsetX: number = 0;
  [@State](/user/State) offsetY: number = 0;
  [@State](/user/State) count: number = 0;
  [@State](/user/State) positionX: number = 0;
  [@State](/user/State) positionY: number = 0;
  [@State](/user/State) borderStyles: BorderStyle = BorderStyle.Solid

build() { Column() { Text(‘sequence gesture\n’ + ‘LongPress onAction:’ + this.count + '\nPanGesture offset:\nX: ’ + this.offsetX + ‘\n’ + 'Y: ’ + this.offsetY) .fontSize(28) } // 绑定translate属性可以实现组件的位置移动 .translate({ x: this.offsetX, y: this.offsetY, z: 0 }) .height(250) .width(300) //以下组合手势为顺序识别,当长按手势事件未正常触发时不会触发拖动手势事件 .gesture( // 声明该组合手势的类型为Sequence类型 GestureGroup(GestureMode.Sequence, // 该组合手势第一个触发的手势为长按手势,且长按手势可多次响应 LongPressGesture({ repeat: true }) // 当长按手势识别成功,增加Text组件上显示的count次数 .onAction((event: GestureEvent|undefined) => { if(event){ if (event.repeat) { this.count++; } } console.info(‘LongPress onAction’); }) .onActionEnd(() => { console.info(‘LongPress end’); }), // 当长按之后进行拖动,PanGesture手势被触发 PanGesture() .onActionStart(() => { this.borderStyles = BorderStyle.Dashed; console.info(‘pan start’); }) // 当该手势被触发时,根据回调获得拖动的距离,修改该组件的位移距离从而实现组件的移动 .onActionUpdate((event: GestureEvent|undefined) => { if(event){ this.offsetX = this.positionX + event.offsetX; this.offsetY = this.positionY + event.offsetY; } console.info(‘pan update’); }) .onActionEnd(() => { this.positionX = this.offsetX; this.positionY = this.offsetY; this.borderStyles = BorderStyle.Solid; }) ) ) } }

更多关于HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Comp().gesture(
        GestureGroup(GestureMode.Exclusive,
          TapGesture({ count: 1 })
            .onAction((event: GestureEvent) => {
              console.log('TapGesture onAction 单击/点击')
            }),
          // TapGesture({ count: 2 })
          //   .onAction((event: GestureEvent) => {
          //     console.log('TapGesture onAction 双击')
          //   }),
      LongPressGesture({ repeat: <span class="hljs-literal">false</span> })
        .onAction((event?: GestureEvent) =&gt; {

          console.info(<span class="hljs-string">'LongPress onAction 长按'</span>)
        }),
      PanGesture()
        .onActionStart(() =&gt; {
          console.info(<span class="hljs-string">'pan start 滑动开始'</span>)
        })
        .onActionUpdate((event?: GestureEvent) =&gt; {
          console.info(<span class="hljs-string">'pan update 滑动过程中'</span>)
        })
        .onActionEnd(() =&gt; {
          console.info(<span class="hljs-string">'pan end 滑动结束'</span>)
        })
    )
      .onCancel(() =&gt; {
        console.info(<span class="hljs-string">'sequence gesture canceled'</span>)
      })
  )</code></pre></div></div>

在HarmonyOS鸿蒙Next的ArkUI框架中,处理组件的触摸事件和手势识别主要通过以下方式实现:

  1. 触摸事件处理

    • ArkUI开发框架会在触屏事件触发前,进行按压点和组件区域的触摸测试来收集需要响应触屏事件的组件,然后基于触摸测试结果分发相应的触屏事件。
    • 可以通过设置组件的hitTestBehavior属性,调整触摸测试的响应模式,影响后续的触屏事件分发。
  2. 手势识别

    • HarmonyOS支持多种手势识别,包括点击(TapGesture)、长按(LongPressGesture)、拖动(PanGesture)和捏合(PinchGesture)等。
    • 可以通过GestureGroup组合多个手势,实现顺序识别、并行识别和互斥识别,从而支持更复杂的用户交互场景。

综上所述,HarmonyOS鸿蒙Next的ArkUI框架提供了强大的触摸事件处理和手势识别能力,开发者可以根据实际需求灵活使用。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部