HarmonyOS 鸿蒙Next SwipeGesture事件如何判断手势的左滑动还是右滑动
HarmonyOS 鸿蒙Next SwipeGesture事件如何判断手势的左滑动还是右滑动
参考文档
1、SwipeGesture使用说明
2、GestureEvent参数说明
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 。