HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别
HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别
- 请问在ArkUI开发中,如何为组件添加触摸事件监听,并识别和处理不同的手势(如滑动、点击、长按等)?
更多关于HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
补充个demo
// xxx.ets
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
[@State](/user/State) offsetX: number = 0;
[@State](/user/State) offsetY: number = 0;
[@State](/user/State) count: number = 0;
[@State](/user/State) positionX: number = 0;
[@State](/user/State) positionY: number = 0;
[@State](/user/State) borderStyles: BorderStyle = BorderStyle.Solid
build() {
Column() {
Text(‘sequence gesture\n’ + ‘LongPress onAction:’ + this.count + '\nPanGesture offset:\nX: ’ + this.offsetX + ‘\n’ + 'Y: ’ + this.offsetY)
.fontSize(28)
}
// 绑定translate属性可以实现组件的位置移动
.translate({ x: this.offsetX, y: this.offsetY, z: 0 })
.height(250)
.width(300)
//以下组合手势为顺序识别,当长按手势事件未正常触发时不会触发拖动手势事件
.gesture(
// 声明该组合手势的类型为Sequence类型
GestureGroup(GestureMode.Sequence,
// 该组合手势第一个触发的手势为长按手势,且长按手势可多次响应
LongPressGesture({ repeat: true })
// 当长按手势识别成功,增加Text组件上显示的count次数
.onAction((event: GestureEvent|undefined) => {
if(event){
if (event.repeat) {
this.count++;
}
}
console.info(‘LongPress onAction’);
})
.onActionEnd(() => {
console.info(‘LongPress end’);
}),
// 当长按之后进行拖动,PanGesture手势被触发
PanGesture()
.onActionStart(() => {
this.borderStyles = BorderStyle.Dashed;
console.info(‘pan start’);
})
// 当该手势被触发时,根据回调获得拖动的距离,修改该组件的位移距离从而实现组件的移动
.onActionUpdate((event: GestureEvent|undefined) => {
if(event){
this.offsetX = this.positionX + event.offsetX;
this.offsetY = this.positionY + event.offsetY;
}
console.info(‘pan update’);
})
.onActionEnd(() => {
this.positionX = this.offsetX;
this.positionY = this.offsetY;
this.borderStyles = BorderStyle.Solid;
})
)
)
}
}
更多关于HarmonyOS 鸿蒙Next 在ArkUI中如何处理组件的触摸事件和手势识别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
Comp().gesture(
GestureGroup(GestureMode.Exclusive,
TapGesture({ count: 1 })
.onAction((event: GestureEvent) => {
console.log('TapGesture onAction 单击/点击')
}),
// TapGesture({ count: 2 })
// .onAction((event: GestureEvent) => {
// console.log('TapGesture onAction 双击')
// }),
LongPressGesture({ repeat: <span class="hljs-literal">false</span> })
.onAction((event?: GestureEvent) => {
console.info(<span class="hljs-string">'LongPress onAction 长按'</span>)
}),
PanGesture()
.onActionStart(() => {
console.info(<span class="hljs-string">'pan start 滑动开始'</span>)
})
.onActionUpdate((event?: GestureEvent) => {
console.info(<span class="hljs-string">'pan update 滑动过程中'</span>)
})
.onActionEnd(() => {
console.info(<span class="hljs-string">'pan end 滑动结束'</span>)
})
)
.onCancel(() => {
console.info(<span class="hljs-string">'sequence gesture canceled'</span>)
})
)</code></pre></div></div>
在HarmonyOS鸿蒙Next的ArkUI框架中,处理组件的触摸事件和手势识别主要通过以下方式实现:
-
触摸事件处理:
- ArkUI开发框架会在触屏事件触发前,进行按压点和组件区域的触摸测试来收集需要响应触屏事件的组件,然后基于触摸测试结果分发相应的触屏事件。
- 可以通过设置组件的
hitTestBehavior
属性,调整触摸测试的响应模式,影响后续的触屏事件分发。
-
手势识别:
- HarmonyOS支持多种手势识别,包括点击(TapGesture)、长按(LongPressGesture)、拖动(PanGesture)和捏合(PinchGesture)等。
- 可以通过GestureGroup组合多个手势,实现顺序识别、并行识别和互斥识别,从而支持更复杂的用户交互场景。
综上所述,HarmonyOS鸿蒙Next的ArkUI框架提供了强大的触摸事件处理和手势识别能力,开发者可以根据实际需求灵活使用。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。