HarmonyOS 鸿蒙Next SwipeGesture事件如何判断手势的左滑动还是右滑动

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

HarmonyOS 鸿蒙Next SwipeGesture事件如何判断手势的左滑动还是右滑动

SwipeGesture事件如何判断手势的左滑动还是右滑动,目前事件回来的参数就angle角度变化,

3 回复
实现onAction(event:(event: GestureEvent) => void)监听,回调对象GestureEvent可以区分左右

参考文档

1、SwipeGesture使用说明

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-gestures-swipegesture-V5

2、GestureEvent参数说明

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-gesture-settings-V5#ZH-CN_TOPIC_0000001930676517__gestureevent%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E

offsetX number 手势事件偏移量X,单位为vp,用于PanGesture手势触发场景,从左向右滑动offsetX为正,反之为负。

SwipeGesture无法判断,如上述建议使用PanGesture,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-gestures-pangesture-V5

其中回调event: GestureEvent,GestureEvent参数offsetX判断,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-gesture-settings-V5#gestureevent%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E

用angle角度变化判断就挺好的,如果实在不想用,也可以使用touch记录位置自己判断距离

[@Entry](/user/Entry)
[@Component](/user/Component)
struct HitTestBehaviorExample {
  [@State](/user/State) screenStartX: number = 0; // 触摸开始时的屏幕X坐标
  [@State](/user/State) screenStartY: number = 0; // 触摸开始时的屏幕Y坐标
  [@State](/user/State) lastScreenX: number = 0; // 触摸结束时的屏幕X坐标
  [@State](/user/State) lastScreenY: number = 0; // 触摸结束时的屏幕Y坐标
  build() {
    // outer stack
     Column(){
       Button('测试')
         .linearGradient({
           angle: 30,
           colors: [[0xff0000, 0.0], [0x0000ff, 1.0]]
         })
     }.width('100%').height('100%')
     .onTouch((e) => {
       if (e.type === TouchType.Down && e.touches.length > 0) { // 触摸开始,记录初始位置
         this.screenStartX = e.touches[0].x;
         this.screenStartY = e.touches[0].y;
       } else if (e.type === TouchType.Up && e.changedTouches.length > 0) { // 当手指抬起时,更新最后的位置
         this.lastScreenX = e.changedTouches[0].x;
         this.lastScreenY = e.changedTouches[0].y;
       }
     })
     .gesture(
       SwipeGesture({ direction: SwipeDirection.All })// 支持方向中 all可以是上下左右
         .onAction((_event: GestureEvent) => {
           const swipeX = this.lastScreenX - this.screenStartX;
           const swipeY = this.lastScreenY - this.screenStartY;
           // 清除开始位置记录,准备下一次滑动判断
           this.screenStartX = 0;
           this.screenStartY = 0;
           if (Math.abs(swipeX) > Math.abs(swipeY)) {
             if (swipeX > 0) {
               console.info(`向右滑动`)
             } else {
               console.info(`向左滑动`)
             }
           } else {
             if (swipeY > 0) {
               console.info(`向下滑动`)
             } else {
               console.info(`向上滑动`)
             }
           }
         })
     )
  }
}
 

在HarmonyOS 鸿蒙Next中,要判断SwipeGesture事件是左滑动还是右滑动,可以通过分析事件中的角度(angle)变化或位置(X坐标)变化来实现。

SwipeGesture事件通常会返回一个包含角度信息的GestureEvent对象。如果事件返回的角度参数可以直接使用,那么判断逻辑可以基于该角度:当手指滑动方向与x轴夹角小于45度且角度为正时,视为向右滑动;当角度为负时,视为向左滑动。

此外,如果不使用角度参数,也可以通过记录滑动开始和结束时的X坐标来判断滑动方向。具体实现方法是:在触摸开始时记录初始X坐标,在触摸结束时记录最终X坐标,通过比较这两个坐标的差值,若差值大于0,则视为向右滑动;若差值小于0,则视为向左滑动。

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

回到顶部