HarmonyOS 鸿蒙Next 有什么接口能实现手势或者是其他事件在.onTouch之前触发

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

HarmonyOS 鸿蒙Next 有什么接口能实现手势或者是其他事件在.onTouch之前触发

现在onTouch触发的时候会在画布绘制路径,但是PinchGesture捏合手势做画布放大缩小的时候会先触发.onTouch事件,没办法做到放大缩小的时候不禁止绘制路径。

2 回复

在ontouch事件中,判断event.touches.length,有多个手指就return。 // xxx.ets


@Entry
@Component
struct PinchGestureExample {
  @State scaleValue: number = 1
  @State pinchValue: number = 1
  @State pinchX: number = 0
  @State pinchY: number = 0
  @State text: string = ''
  @State eventType: string = ''
  aboutToDisappear(): void {
  }
  build() {
    Column() {
      Column() {
        Text('PinchGesture scale:\n' + this.scaleValue)
        Text('PinchGesture center:\n(' + this.pinchX + ',' + this.pinchY + ')')
      }
      .height(200)
      .width(300)
      .padding(20)
      .border({ width: 3 })
      .margin({ top: 100 })
      .scale({ x: this.scaleValue, y: this.scaleValue, z: 1 })
      // 两指捏合触发该手势事件
      .gesture(
        PinchGesture({ fingers: 2 })
          .onActionStart((event: GestureEvent) => {
            console.info('Pinch start')
          })
          .onActionUpdate((event: GestureEvent) => {
            if (event) {
              this.scaleValue = this.pinchValue * event.scale
              this.pinchX = event.pinchCenterX
              this.pinchY = event.pinchCenterY
            }
          })
          .onActionEnd((event: GestureEvent) => {
            this.pinchValue = this.scaleValue
            console.info('Pinch end')
          })
      )
      .onTouch((event?: TouchEvent) => {
        if(event){
          if (event.touches.length > 1) {
            return
          }
          if (event.type === TouchType.Down) {
            this.eventType = 'Down'
          }
          if (event.type === TouchType.Up) {
            this.eventType = 'Up'
          }
          if (event.type === TouchType.Move) {
            this.eventType = 'Move'
          }
          this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '
            + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('
            + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'
            + event.target.area.width + '\nheight:' + event.target.area.height
        }
      })
      Text(this.text)
    }.width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 有什么接口能实现手势或者是其他事件在.onTouch之前触发的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,通常事件的处理顺序是由系统捕获并分发,然后按照既定的逻辑进行处理。.onTouch方法是在触摸事件发生时被调用的,用于处理触摸相关的逻辑。

要实现手势或其他事件在.onTouch之前触发,通常这不是直接通过某个特定接口来实现的,而是需要开发者在事件分发和处理的机制上进行更深入的定制。HarmonyOS提供了事件分发和处理的机制,允许开发者在事件到达目标组件之前进行拦截和处理。

一种可能的方法是使用事件监听器或拦截器,在事件分发链路的早期阶段捕获并处理事件。然而,这需要开发者对事件分发机制有深入的理解,并且可能需要修改或扩展现有的事件处理逻辑。

如果开发者希望在触摸事件之前触发某些逻辑,建议深入研究HarmonyOS的事件分发和处理机制,并尝试在事件分发链路的早期阶段进行拦截和处理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部