使用拖动手势PanGesture指定fingers为1,如果手指1不在触摸区,由手指2进行拖动,event.fingerList[0]为undefined,希望能优化这个问题。
复现demo:
// xxx.ets
@Entry
@Component
struct Index {
@State offsetX: number = 0;
@State offsetY: number = 0;
@State positionX: number = 0;
@State positionY: number = 0;
build() {
Column() {
Text('PanGesture Offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)
.fontSize(28)
.height(200)
.width(300)
.padding(20)
.border({ width: 3 })
// 在组件上绑定布局位置信息
.translate({ x: this.offsetX, y: this.offsetY, z: 0 })
.gesture(
// 绑定拖动手势
PanGesture({
fingers: 1
})
.onActionStart((event: GestureEvent|undefined) => {
console.info('Pan start');
})
// 当触发拖动手势时,根据回调函数修改组件的布局位置信息
.onActionUpdate((event: GestureEvent|undefined) => {
if(event){
this.offsetX = this.positionX + event.offsetX;
this.offsetY = this.positionY + event.offsetY;
for (let i = 0; i < event.fingerList.length; i++) {
let info = event.fingerList[i];
console.log(`TAG== ${i} -- ${JSON.stringify(info)}`);
}
}
})
.onActionEnd(() => {
this.positionX = this.offsetX;
this.positionY = this.offsetY;
})
)
}
.height(200)
.width(250)
}
}
先按下且未参与当前手势触发的手指在fingerList中对应位置为空
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-gesture-settings-V5\#gestureevent对象说明
可以通过遍历fingerList,第一个不为空的手指就是触发手势事件的手指了