当前位置: 首页 > news >正文

鸿蒙手势交互(三:组合手势)

在这里插入图片描述

三、组合手势

由多种单一手势组合而成,通过在GestureGroup中使用不同的GestureMode来声明该组合手势的类型,支持顺序识别、并行识别和互斥识别三种类型。

GestureGroup(mode:GestureMode, gesture:GestureType[])
//- mode:为GestureMode枚举类。用于声明该组合手势的类型。//- gesture:由多个手势组合而成的数组。用于声明组合成该组合手势的各个手势。
  1. 顺序识别 顺序识别组合手势对应的GestureMode为Sequence
//- 手势将按照手势的注册顺序识别手势,直到所有的手势识别成功。
//- 当顺序识别组合手势中有一个手势识别失败时,后续手势识别均失败。
//- 顺序识别手势组仅有最后一个手势可以响应onActionEnd。// 这里拖拽事件是一种典型的顺序识别组合手势事件,由长按手势事件和滑动手势事件组合而成
@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)}.margin(10).borderWidth(1)// 绑定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;})).onCancel(() => {console.log("sequence gesture canceled")}))}
}
  1. 并行识别 并行识别组合手势对应的GestureMode为Parallel
//- 并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束。
//- 并行识别手势组合中的手势进行识别时互不影响。// 在一个Column组件上绑定点击手势和双击手势组成的并行识别手势
@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('100%')// 以下组合手势为并行并别,单击手势识别成功后,若在规定时间内再次点击,双击手势也会识别成功.gesture(GestureGroup(GestureMode.Parallel,TapGesture({ count: 1 }).onAction(() => {this.count1++;}),TapGesture({ count: 2 }).onAction(() => {this.count2++;})))}
}
  1. 互斥识别 互斥识别组合手势对应的GestureMode为Exclusive
//- 互斥识别组合手势中注册的手势将同时进行识别,若有一个手势识别成功,则结束手势识别,其他所有手势识别失败。// 在一个Column组件上绑定单击手势和双击手势组合而成的互斥识别组合手势
@Entry
@Component
struct Index {@State count1: number = 0;@State count2: number = 0;build() {Column() {Text('Exclusive gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + '\n').fontSize(28)}.height(200).width('100%')//以下组合手势为互斥并别,单击手势识别成功后,双击手势会识别失败.gesture(GestureGroup(GestureMode.Exclusive,TapGesture({ count: 1 }).onAction(() => {this.count1++;}),TapGesture({ count: 2 }).onAction(() => {this.count2++;})))}
}
http://www.lryc.cn/news/447650.html

相关文章:

  • 【计算机方向】中科院二区TOP神刊!国人发文友好,刊文量高,录用容易!
  • Stable Diffusion 保姆级教程
  • 踩坑记录:adb修改settings数据库ContentObserver无回调
  • JAVA毕业设计183—基于Java+Springboot+vue的旅游小程序系统(源代码+数据库)
  • [大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26
  • WiFi无线连接管理安卓设备工具:WiFiADB
  • Django项目配置日志
  • 在IntelliJ IDEA中设置文件自动定位
  • 机器学习笔记 - week6 -(十一、机器学习系统的设计)
  • 对c语言中的指针进行深入全面的解析
  • xxl-job 适配达梦数据库
  • Linux 配置与管理 SWAP(虚拟内存)
  • yolo自动化项目实例解析(七)自建UI--工具栏选项
  • 贝锐洋葱头浏览器随时随地访问教务系统,轻松搞定选课
  • django drf to_internal_value
  • map(lambda x: x[0], sorted(count.items(), key=lambda x: (-x[1], x[0]))[:n])
  • 灰度重心法求取图像重心
  • Go Mail设置指南:如何提升发送邮件效率?
  • kali的tplmap使用报错解决
  • DAY16||513.找树左下角的值 |路径总和|从中序与后序遍历序列构造二叉树
  • 使用jQuery处理Ajax
  • uni-app App版本更新
  • Python Web 与低代码/无代码平台的深度融合
  • js 如何监听 body 内容是否改变
  • python: 数字类型的一些函数
  • MapReduce学习与理解
  • Animal objDog = new Dog()和 Dog objDog = new Dog()的区别
  • springboot引入netty
  • PWM基础与信号控制
  • nvm,一款nodejs版本管理工具