HarmonyOS 鸿蒙Next中LongPressGesture手势事件如何获得手指按压位置?

HarmonyOS 鸿蒙Next中LongPressGesture手势事件如何获得手指按压位置?

GestureEvent没有ClickEvent中的x、y、windowX、windowY、displayX、displayY属性。

LongPressGesture:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-gestures-longpressgesture
3 回复

根据鸿蒙文档,LongPressGesture手势事件中获取手指按压位置的方法如下:

获取方式:

GestureEvent对象中,可以通过以下属性获取手指按压的坐标信息:

  1. 使用fingerList数组:该数组包含所有触发事件的手指信息,每个元素(FingerInfo类型)包含:

    • localX: 手指相对于当前组件左上角的X坐标(单位:vp)
    • localY: 手指相对于当前组件左上角的Y坐标(单位:vp)
    • globalX(可选): 手指相对于全局屏幕左上角的X坐标(单位:vp,API 20+支持)
    • globalY(可选): 手指相对于全局屏幕左上角的Y坐标(单位:vp,API 20+支持)
  2. 使用fingerInfos数组(API 20+):该数组提供所有有效触点的信息,结构与fingerList类似,包含相同的坐标属性。

具体示例(从文档中提取):

// 在LongPressGesture的回调中可通过event.fingerList或event.fingerInfos获取坐标
LongPressGesture()
  .onAction((event: GestureEvent) => {
    // 获取第一个手指的局部坐标(相对于当前组件)
    const localX = event.fingerList[0]?.localX; 
    const localY = event.fingerList[0]?.localY;
    
    // 或使用fingerInfos(API 20+)
    // const localX = event.fingerInfos[0]?.localX;
  })

注意事项:

  1. 坐标基准差异

    • localX/localY是基于当前触发手势的组件的坐标系(组件左上角为原点)。
    • 若需要窗口或屏幕坐标系坐标,需使用其他事件类型(如触摸事件)或通过组件布局信息转换。
  2. 数据可用性
    文档明确说明(见《ts-basic-gestures-longpressgesture.md》):

    长按手势触发后,GestureEvent中fingerList和fingerInfos的信息仅在有手指按下时才会更新,手指抬起时不会更新。

  3. 替代方案
    如果需获取全局坐标(如windowX/windowY/displayX/displayY),需使用触摸事件(onTouch) 而非手势事件,因手势事件聚焦于手势语义而非原始触点数据。

总结:

通过event.fingerList[index].localX/localY获取相对于当前组件的按压位置。

更多关于HarmonyOS 鸿蒙Next中LongPressGesture手势事件如何获得手指按压位置?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,通过LongPressGesture的fingerList属性获取手指按压位置。每个Finger对象包含x和y坐标,表示按压点的屏幕位置。使用onAction回调事件处理按压操作,直接访问事件参数中的位置信息。

在HarmonyOS Next中,LongPressGesture 事件通过 GestureEvent 对象传递位置信息,但需注意其属性与 ClickEvent 不同。通过 event.fingerList 可以获取按压点的详细信息,包括坐标。以下是示例代码:

LongPressGesture()
  .onAction((event: GestureEvent) => {
    if (event.fingerList.length > 0) {
      const finger = event.fingerList[0];
      console.log(`按压位置: x=${finger.x}, y=${finger.y}`);
      // 如需窗口或屏幕坐标,可进一步转换
    }
  })

每个 fingerList 中的元素包含 xy 属性,表示相对组件左上角的坐标。若需全局坐标,可通过组件位置计算或使用其他API转换。

回到顶部