鸿蒙交互事件开发04——手势事件

news2024/9/23 20:52:36

1    概    述   

手势事件是移动应用开发中最常见的事件之一,鸿蒙提供了一些方法来绑定手势事件。通过给各个组件绑定不同的手势事件,并设计事件的响应方式,当手势识别成功时,ArkUI框架将通过事件回调通知组件手势识别的结果。

绑定手势事件的方法有三种:a)普通绑定;b)带优先级的绑定;c)并行手势绑定。下面分别讨论。

2   普 通 绑 定 

普通的绑定方式接口定义如下:

.gesture(gesture: GestureType, mask?: GestureMask)

其中,GestureType是手势种类实例,默认有如下取值:

👉🏻 TapGesture:点击手势,支持单次点击、多次点击的识别。

👉🏻 LongPressGesture: 长按手势。

👉🏻 PanGesture: 平移手势(滑动距离小于5vp时触发)

👉🏻 PinchGesture: 捏合手势

👉🏻 RotationGesture: 旋转手势

👉🏻 SwipGesture: 滑动手势(滑动最小速度为100vp/s时触发)

👉🏻 GestureGroup: 将手势识别组合成一组,支持连续识别,并行识别和互斥识别

第二参数GestureMask是一个枚举,分别有如下取值

👉🏻 Normal: 不屏蔽子组件的手势,按照默认手势识别顺序进行识别

👉🏻 IgnoreInternal: 屏蔽子组件的手势,包括子组件上系统内置的手势,如子组件为List组件时,内置的滑动手势同样会被屏蔽。

举例:我们可以将点击手势TapGesture通过gesture手势绑定方法绑定到Text组件上。

// xxx.ets@Entry@Componentstruct Index {  build() {    Column() {      Text('Gesture').fontSize(28)        // 采用gesture手势绑定方法绑定TapGesture        .gesture(          TapGesture()            .onAction(() => {              console.info('TapGesture is onAction');            }))    }    .height(200)    .width(250)  }}

3  带优先级的绑定

带优先级的手势绑定接口定义如下:

.priorityGesture(gesture: GestureType, mask?: GestureMask)。

接口中:GestureType和GestureMask的参数与普通绑定的参数相同,这里不再展开介绍。

在默认情况下,当父组件和子组件使用普通gesture绑定同类型的手势时,子组件优先识别通过gesture绑定的手势。当父组件使用priorityGesture绑定与子组件同类型的手势时,父组件优先识别通过priorityGesture绑定的手势。

举例:当父组件Column和子组件Text同时绑定TapGesture手势时,父组件以带优先级手势priorityGesture的形式进行绑定时,优先响应父组件绑定的TapGesture

// xxx.ets@Entry@Componentstruct Index {  build() {    Column() {      Text('Gesture').fontSize(28)        .gesture(          TapGesture()            .onAction(() => {              console.info('Text TapGesture is onAction');            }))    }    .height(200)    .width(250)    // 设置为priorityGesture时,点击文本区域会忽略Text组件的TapGesture手势事件,优先响应父组件Column的TapGesture手势事件    .priorityGesture(      TapGesture()        .onAction(() => {          console.info('Column TapGesture is onAction');        }), GestureMask.IgnoreInternal)  }}

4 并行手势绑定

接口定义如下:

.parallelGesture(gesture: GestureType, mask?: GestureMask)

接口中:GestureType和GestureMask的参数与普通绑定的参数相同,这里不再展开介绍。

在默认情况下,手势事件为非冒泡事件,当父子组件绑定相同的手势时,父子组件绑定的手势事件会发生竞争,最多只有一个组件的手势事件能够获得响应。而当父组件绑定了并行手势parallelGesture时,父子组件相同的手势事件都可以触发,实现类似冒泡效果。

Demo:​​​​​​​

// xxx.ets@Entry@Componentstruct Index {  build() {    Column() {      Text('Gesture').fontSize(28)        .gesture(          TapGesture()            .onAction(() => {              console.info('Text TapGesture is onAction');            }))    }    .height(200)    .width(250)    // 设置为parallelGesture时,点击文本区域会同时响应父组件Column和子组件Text的TapGesture手势事件    .parallelGesture(      TapGesture()        .onAction(() => {          console.info('Column TapGesture is onAction');        }))  }}

图片

上面例子中,如果我们想让父组件Column独自消费TapGesture,则可以在绑定时添加第二个参数 GestureMask.IgnoreInternal 。代码如下:​​​​​​​

// xxx.ets@Entry@Componentstruct Index {  build() {    Column() {      Text('Gesture').fontSize(28)        .gesture(          TapGesture()            .onAction(() => {              console.info('Text TapGesture is onAction');            }))    }    .height(200)    .width(250)    // 设置为parallelGesture时,点击文本区域会同时响应父组件Column和子组件Text的TapGesture手势事件    .parallelGesture(      TapGesture()        .onAction(() => {          console.info('Column TapGesture is onAction');        }), GestureMask.IgnoreInternal)  }}

图片

此时,控制台只有Column容器的日志打印。

由于篇幅原因,后续我们继续讨论手势事件的其他场景。

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

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

相关文章

记录一款人气领先的开源国产 ERP 系统

推荐一款人气领先的国产ERP系统,目前在Gitee上有12.3k star,在github上面也有1.2k 管伊佳ERP(原名华夏ERP)基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前仅支持进销存财务生产功…

2025年第八届计算机图形和虚拟国际会议(ICCGV 2025)即将召开!

2025年第八届计算机图形和虚拟国际会议(ICCGV 2025)将于2025年2月21-23日在中国成都举行。随着信息技术的飞速发展,计算机图形学与虚拟现实技术正以前所未有的速度重塑着我们的认知世界与交互体验。从沉浸式游戏到精准医疗模拟,从…

气压测试实验(用IIC)

I2C: 如果没有I2c这类总线,连接方法可能会如下图: 单片机所有的通讯协议,无非是建立在引脚(高低电平的变换高低电平持续的时间)这二者的组合上,i2c 多了一个clock线,负责为数据传输打节拍。 (i2…

Unity3d中制作触发区域为圆形的按钮

一、常规矩形的Button制作 设置Highlighed Color为绿色。 此时当鼠标在button上方时会显示绿色: 二、圆形Button制作 在Button的Image中选择Source Image为Knob。 程序运行时,鼠标在矩形和圆形之间的区域,button还是会变成绿色。 所以&…

【时时三省】(C语言基础)指针进阶 例题5

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 abcdef是个常量字符串 把首地址a放在了p里面 第一个p 算的是指针变量的大小 它打印就是4或者8 第二个p1 p本来是a的地址 1就是b的地址 是地址就是打印四或者八 …

chapter14-集合——(List-LikedHashSet)——day18

目录 528-LikedHashSet介绍 529-LikedHashSet源码介绍 528-LikedHashSet课堂练习 528-LikedHashSet介绍 529-LikedHashSet源码介绍 528-LikedHashSet课堂练习

【计网】从零开始认识网络socket

优于别人,并不高贵, 真正的高贵应该是优于过去的自己。 --- 海明威 --- 从零开始认识网络socket 1 网络通信流程2 IP地址 VS MAC地址3 网络socket3.1 理解源 IP 地址和目的 IP 地址3.2 传输层的典型代表3.3 网络字节序3.4 socket编程基础 1 网络通信流…

高压直流接触器及使用注意事项

高压直流接触器及使用注意事项 1.概述2.接触器和继电器有什么区别3.节能线圈4.安装位置5.直流继电器线圈抑制6.高压继电器和接触器有哪些应用?7.线圈效率的决定因素是什么?对线圈驱动器有什么要求?8.负载极性对接触器的影响9.触点参数注意事项10.线圈供电要求1.概述 航空接…

基于单片机实现的的多点分布室内环境监测系统

基于STM32单片机为基础设计的一款室内环境监测系统程序源码 程序分为接收端和采集端两部分 接收端与采集端均以STM32单片机作为控制核心,两者通过ZigBee无线通信技术进行连接。接收端主要用于接收数据并将其实时显示以及报警。 采集端主要用于监测室内环境的各类数…

【Python工具】Python 装饰器实现统计函数执行时长

文章目录 1、背景2、轮子 1、背景 业务基本代码堆积完毕了,部分流程需要调优,想着在几个关键执行路径上进行时间记录,类似 SQL 慢日志一样的方法,方便进行性能问题发现。 了解了下,应该是采用装饰器实现是代码侵入最…

林草湿地址、导出echart为word

2.导出 // 导出exportDoc () {this.loading truelet arrRefs [this.$refs.endChart, this.$refs.processChart, this.$refs.officeEndChart]setTimeout(() > {Promise.all(arrRefs.map((canvasDom) > {return this.html2canvasHandle(canvasDom)})).then(res > {let…

如何让潜意识帮你实现你的目标

潜意识的力量是意识的3万倍以上 如果你有一个宏大的目标,怎么借助潜意识实现你的目标呢 比如,我的目标是:帮助100万人颠覆潜意识,实现人生蜕变,并且培养一万名潜意识开发导师 这么宏大的一个目标,怎么让…

B-树底层原理

一、B-树介绍 定义: B-树(B-Tree)是一种自平衡的树形数据结构,广泛应用于数据库和操作系统中。它的设计目标是减少搜索、顺序访问、插入和删除操作中比较次数和移动次数,特别适合于磁盘中数据的存储和检索。 性质&a…

运维团队日志管理策略参考

在运维工作中,日志管理是一项至关重要的任务。有效的日志管理不仅能够帮助运维团队实时监控系统状态、发现潜在问题,还能为故障排查和系统性能优化提供宝贵的数据支持。本文结合运维行业的实际需求,介绍了一套全面的日志管理策略,…

AutoDroid: LLM-powered Task Automation inAndroid论文学习

光看题目怎么和上一篇差不多?又是纯用LLM的? 当然还是有一点不一样的: 这里的最大特点是加上了UI领域知识,可以大幅增强LLM在处理UI方面的知识的能力。根据文章的说法,使用了这招他们的LLM可以吊打GPT4V,准…

node.js 完全卸载和下载配置

一、介绍 (1)node.js Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, [1]让JavaScript 运行在服务端的开发平台&#xff0c…

Linux开发工具的使用

文章目录 vim的使用基本模式介绍光标当前行操作光标快速定位(命令行模式):插入模式的三种方式(命令行模式):vim基本操作(命令行模式)底行模式的操作 Linux编译器 - gcc/g的使用Linux…

录屏软件免费版:四款热门工具全面解析!

日常生活或工作中,我们经常有记录屏幕的需求。今天,就让我们来探索几款市面上广受欢迎的免费录屏软件,它们不仅功能强大,而且完全免费,让屏幕录制体验更加流畅和高效。 福昕录屏大师 直达链接:www.foxits…

比亚迪海豹06这油耗,丈母娘都叫好

文 | AUTO芯球 作者 | 雷慢 刚一朋友问我 有没有什么好看、价格低, 车大、油耗还低的车, 开到女盆友家能第一个动筷子。 哎,我要给你说的这车, 能不能第一个动筷子 首先看你未来的丈母娘喜欢什么货色的, 其次你…

仿最近老火的羊了个羊 三消游戏源码,两种玩法模式,完整带后台

游戏玩儿法类似于养了个羊,有两种模式,一个是普通版。一个是王者荣耀版。 代码免费下载:百度网盘