HarmonyOS pan手势问题

全屏有上下左右手势也是按住不放,切竖屏pan手势禁用掉的,因为手没离开屏幕,现在处理是在回调里面判断,有没有其他啊方案可以规避手势回调。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

目前只能在回调里判断,因为ontouch拦截影响不到已经发生的回调,参考示例如下:

import { mediaquery } from '@kit.ArkUI';

// xxx.ets
@Entry
@Component
struct PanGestureExample0814 {
  @State offsetX: number = 0
  @State offsetY: number = 0
  @State positionX: number = 0
  @State positionY: number = 0
  private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.All })
  private listener = mediaquery.matchMediaSync('(orientation: landscape)'); //监听横屏事件
  @State panEnable: boolean = true;

  aboutToAppear(): void {
    this.listener.on('change', (mediaQueryResult: mediaquery.MediaQueryResult) => {
      this.onPortrait(mediaQueryResult)
    });
  }

  aboutToDisappear(): void {
    this.listener.off('change', (mediaQueryResult: mediaquery.MediaQueryResult) => {
      this.onPortrait(mediaQueryResult)
    });
  }

  onPortrait(mediaQueryResult: mediaquery.MediaQueryResult) {
    console.info('mediaQueryResult.matches:' + mediaQueryResult.matches)
    if (mediaQueryResult.matches) {
      console.log('横屏')
      this.panEnable = false;
    } else {
      console.log('竖屏')
      this.panEnable = true;
    }
  }

  build() {
    Column() {
      Column() {
        Column() {
          Text('PanGesture offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)
        }
        .height(200)
        .width(300)
        .padding(20)
        .border({ width: 3 })
        .translate({ x: this.offsetX, y: this.offsetY, z: 0 }) // 以组件左上角为坐标原点进行移动
        // 左右拖动触发该手势事件
        .gesture(
          PanGesture(this.panOption)
            .onActionStart((event: GestureEvent) => {
              console.info('Pan start')
            })
            .onActionUpdate((event: GestureEvent) => {
              if (!this.panEnable) {
                return;
              }
              if (event) {
                this.offsetX = this.positionX + event.offsetX
                this.offsetY = this.positionY + event.offsetY
              }
            })
            .onActionEnd((event: GestureEvent) => {
              this.positionX = this.offsetX
              this.positionY = this.offsetY
              console.info('Pan end')
            })
        )
      }

      Text('手势:' + this.panEnable)
      Button('屏蔽手势')
        .onClick(() => {
          this.panEnable = false;
        })

      Button('开启手势')
        .onClick(() => {
          this.panEnable = true;
        })
    }.width('100%').height('100%')
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 关于手势问题
178浏览 • 1回复 待解决
HarmonyOS 手势事件上报问题
326浏览 • 1回复 待解决
HarmonyOS 手势响应不同角度问题
337浏览 • 1回复 待解决
HarmonyOS LongPressGesture手势移动问题
607浏览 • 1回复 待解决
HarmonyOS app大图预览手势问题
162浏览 • 1回复 待解决
HarmonyOS 禁用滑动返回手势问题
169浏览 • 1回复 待解决
HarmonyOS 关于stack组件手势遮盖问题
12浏览 • 1回复 待解决
HarmonyOS 拦截系统返回手势问题
897浏览 • 1回复 待解决
HarmonyOS 触摸手势相关的问题
100浏览 • 1回复 待解决
HarmonyOS 弹窗的后退手势处理问题
269浏览 • 1回复 待解决
Web和List嵌套手势冲突问题
1123浏览 • 1回复 待解决
HarmonyOS 手势监听
127浏览 • 1回复 待解决
HarmonyOS 手势密码组件
163浏览 • 1回复 待解决
关于WebView提示没有用户手势问题
10548浏览 • 1回复 待解决
HarmonyOS 动画效果+手势
151浏览 • 1回复 待解决
HarmonyOS FrameNode手势检测crash
22浏览 • 1回复 待解决