鸿蒙HarmonyOS实战-ArkUI事件(组合手势)

news/2024/9/23 23:29:47

🚀一、组合手势

应用程序的手势操作是指在移动设备上使用手指或手势进行与应用程序交互的方式。手势操作可以包括点击、滑动、双击、捏合等动作,用于实现不同的功能和操作。

HarmonyOS中常见的手势操作及其功能:

image

组合手势是由多个手势组合而成的手势动作。通过不同手势的组合,可以完成更复杂的操作。例如,可以通过组合手势来实现缩放、旋转、滑动等操作。组合手势可以提高用户交互的灵活性和效率。

GestureGroup(mode:GestureMode, ...gesture:GestureType[])

image

🔎1.顺序识别

组合手势的顺序识别是指识别由多个手势组合而成的特定顺序的手势。在手势识别中,有些任务可能需要用户按照特定的顺序执行一系列手势才能触发某种操作或功能。例如,可以定义一个组合手势,要求用户首先做一个向左滑动,然后再做一个向上滑动,最后做一个点击动作才能执行某项操作。

组合手势的顺序识别可以应用于许多领域,如移动设备上的手势控制、虚拟现实、游戏等。它提供了更复杂和精确的用户交互方式,使得用户能够通过简单的手势组合来完成更多的操作或者控制。

// xxx.ets
@Entry
@Component
struct Index {@State offsetX: number = 0;@State offsetY: number = 0;@State count: number = 0;@State positionX: number = 0;@State positionY: number = 0;@State borderStyles: BorderStyle = BorderStyle.Solidbuild() {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) => {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) => {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;})))}
}

image

🔎2.并行识别

组合手势的并行识别是指同时识别多个手势的能力。通常,组合手势是由多个基本手势组合而成的,例如在手机屏幕上的滑动、横扫或双击等。并行识别允许系统同时检测和识别多个手势,而不是一次只能识别一个手势。这样可以提高交互效率和用户体验,使用户能够更自由和灵活地操作设备。

// xxx.ets
@Entry
@Component
struct Index {@State count1: number = 0;@State count2: number = 0;build() {Column() {Text('parallel gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + '\n').fontSize(28)}.height(200).width(250)// 以下组合手势为并行并别,单击手势识别成功后,若在规定时间内再次点击,双击手势也会识别成功.gesture(GestureGroup(GestureMode.Parallel,TapGesture({ count: 1 }).onAction(() => {this.count1++;}),TapGesture({ count: 2 }).onAction(() => {this.count2++;})))}
}

image

🔎3.互斥识别

组合手势互斥识别是指在多种手势操作同时发生时,系统通过识别这些手势的组合,来判断用户的意图并执行相应的操作。互斥识别是指系统能够判断两种或多种手势的组合是否冲突,如果冲突则只执行其中一种手势的操作,避免产生意料之外的结果或混乱。例如,在触摸屏设备上,用户同时进行滑动和放大手势操作时,系统可以通过互斥识别来判断用户是要进行滑动操作还是放大操作,并执行相应的操作。通过组合手势互斥识别,可以提高用户界面的交互性和操作的准确性。

// xxx.ets
@Entry
@Component
struct Index {@State count1: number = 0;@State count2: number = 0;build() {Column() {Text('parallel gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + '\n').fontSize(28)}.height(200).width(250)//以下组合手势为互斥并别,单击手势识别成功后,双击手势会识别失败.gesture(GestureGroup(GestureMode.Exclusive,TapGesture({ count: 1 }).onAction(() => {this.count1++;}),TapGesture({ count: 2 }).onAction(() => {this.count2++;})))}
}

image

🚀写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31118.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

红外学习补充

人们习惯把红外发射管和红外线接收管称为红外对管。红外对管的外形与普通圆形的发光二极管类似。初接触红外对管者,较难区分发射管和接收管。本文介绍三种简便的识别方法。 1. 根据内部结构识别红外对管的内部结构如左图(a),(b)所示。左图(a)是红外发射管,管芯中央凹陷,类…

汇编语言——寄存器

寄存器 程序的本质软件/程序的执行过程硬盘中程序或者软件打开后,会被装载到内存中,由CPU进行读取内存中的机器指令,再由CPU控制计算机进行相应操作 CPU组成寄存器:信息存储 运算器:信息处理 控制器:控制其他器件进行工作寄存器与内存通常,CPU会先将内存中的数据存储到寄…

实例内使用百度网盘

在 GpuMall 平台的实例中,可以通过使用 baidupcs 命令工具来实现对个人百度网盘账号中的数据上传及下载操作,具体操作方法如下在 GpuMall 平台的实例中,可以通过使用 baidupcs 命令工具来实现对个人百度网盘账号中的数据上传及下载操作,具体操作方法如下: 立即免费体验:h…

LVGL --- 库介绍

examples 里面包含了各种小例程,但是不能直接执行。每个例程的母函数命名为 lv_example_xxx_x。 执行方法:在一个已经移植好的程序里面,包含头文件 lvgl/examples/lv_examples.h,然后直接调用例程的母函数,比如:

按图索骥,快速做好架构图

架构图是程序员必备的技能之一。很多同学觉得老是画不好架构图,且经常无从下手,那就看看下面这篇文章,笔者整理分享了关于架构图的相关内容,需要了解相关知识的同学可以进来看看哦!许多的小伙伴坦言画不好架构图,因为有很多困难阻碍了他们的进阶之路。 当你想用一张或几张…

Windows 上的 OpenSSH:安装、配置和使用指南

Windows 上的 OpenSSH:安装、配置和使用指南 发布日期:2024-03-08 分类:Windows 对于大多数 Windows 用户来说,远程桌面协议(RDP)凭借其友好的图形界面,一直是远程管理的首选。但对于需要更精细控制的系统管理员而言,SSH 才是更适合的选择。它通过命令行实现与远程设备…

大一下C++实训

一个彩笔大学生的C++实训作业C++实训题目

[19] C++网络通信开发

Day1通过引入路径找到类型根据角色进入方向开门(向量运算、几何概念、点乘)向量的减法: OtherActor->GetActorLocation() - GetActorLocation() 这一部分是计算两个位置向量之间的差向量,即门的位置向量减去角色的位置向量,得到了一个从门指向角色的向量。向量的归一化:…