#鸿蒙通关秘籍#如何实现顺序识别的组合手势?

HarmonyOS
2024-12-05 13:44:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
hm673ff0a9c5234

顺序识别的组合手势是指按顺序依次触发一系列手势。在HarmonyOS中,使用GestureGroup函数并将GestureMode设置为Sequence类型来实现顺序识别。

下面是如何实现一个由长按和拖动组成的顺序识别组合手势:

// xxx.ets
@Entry
@Component
struct Index {
  @State offsetX: number = 0;
  @State offsetY: number = 0;
  @State count: number = 0;
  @State positionX: number = 0;
  @State positionY: number = 0;
  @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)
    }.margin(10)
    .borderWidth(1)
    .translate({ x: this.offsetX, y: this.offsetY, z: 0 })
    .height(250)
    .width(300)
    .gesture(
      GestureGroup(GestureMode.Sequence,
        LongPressGesture({ repeat: true })
          .onAction((event: GestureEvent|undefined) => {
            if(event && event.repeat) {
              this.count++;
            }
            console.info('LongPress onAction');
          })
          .onActionEnd(() => {
            console.info('LongPress end');
          }),
        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;
          })
      )
      .onCancel(() => {
        console.log("sequence gesture canceled")
      })
    )
  }
}
分享
微博
QQ
微信
回复
2024-12-05 16:43:40
相关问题
#鸿蒙学习大百科#什么是组合手势
463浏览 • 1回复 待解决
语音识别的方法有哪些?
683浏览 • 1回复 待解决
HarmonyOS 驾驶证书识别的demo
175浏览 • 1回复 待解决