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
根据鸿蒙文档,LongPressGesture手势事件中获取手指按压位置的方法如下:
获取方式:
在GestureEvent
对象中,可以通过以下属性获取手指按压的坐标信息:
-
使用
fingerList
数组:该数组包含所有触发事件的手指信息,每个元素(FingerInfo
类型)包含:localX
: 手指相对于当前组件左上角的X坐标(单位:vp)localY
: 手指相对于当前组件左上角的Y坐标(单位:vp)globalX
(可选): 手指相对于全局屏幕左上角的X坐标(单位:vp,API 20+支持)globalY
(可选): 手指相对于全局屏幕左上角的Y坐标(单位:vp,API 20+支持)
-
使用
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;
})
注意事项:
-
坐标基准差异:
localX/localY
是基于当前触发手势的组件的坐标系(组件左上角为原点)。- 若需要窗口或屏幕坐标系坐标,需使用其他事件类型(如触摸事件)或通过组件布局信息转换。
-
数据可用性:
文档明确说明(见《ts-basic-gestures-longpressgesture.md》):长按手势触发后,GestureEvent中fingerList和fingerInfos的信息仅在有手指按下时才会更新,手指抬起时不会更新。
-
替代方案:
如果需获取全局坐标(如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
中的元素包含 x
和 y
属性,表示相对组件左上角的坐标。若需全局坐标,可通过组件位置计算或使用其他API转换。