鸿蒙Harmony应用开发—ArkTS声明式开发(手势处理:绑定手势方法)

为组件绑定不同类型的手势事件,并设置事件的响应方法。

说明:

从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

绑定手势识别

通过如下属性给组件绑定手势识别,手势识别成功后可以通过事件回调通知组件。 可以通过触摸热区指定可识别手势的区域。

名称参数类型默认值描述
gesturegesture: GestureType,
mask?: GestureMask
gesture: -,
mask: GestureMask.Normal
绑定手势。
- gesture: 绑定的手势类型。 
- mask: 事件响应设置。
priorityGesturegesture: GestureType,
mask?: GestureMask
gesture: -,
mask: GestureMask.Normal
绑定优先识别手势。
- gesture: 绑定的手势类型。
- mask: 事件响应设置。
1、默认情况下,子组件优先识别通过gesture绑定的手势,当父组件配置priorityGesture时,父组件优先识别priorityGesture绑定的手势。
2、长按手势时,设置触发长按的最短时间小的组件会优先响应,会忽略priorityGesture设置。
parallelGesturegesture: GestureType,
mask?: GestureMask
gesture: -,
mask: GestureMask.Normal
绑定可与子组件手势同时触发的手势。
- gesture: 绑定的手势类型。 
- mask: 事件响应设置。
手势事件为非冒泡事件。父组件设置parallelGesture时,父子组件相同的手势事件都可以触发,实现类似冒泡效果。若父子组件中同时绑定单击手势事件和双击手势事件,则只响应单击手势事件。

GestureType

名称描述
TapGesture点击手势,支持单次点击、多次点击识别。
LongPressGesture长按手势。
PanGesture平移手势,滑动最小距离为5vp时识别成功。
PinchGesture捏合手势。
RotationGesture旋转手势。
SwipeGesture滑动手势,滑动最小速度为100vp/s时识别成功。
GestureGroup手势识别组,多种手势组合为复合手势,支持连续识别、并行识别和互斥识别。

GestureMask枚举说明

名称描述
Normal不屏蔽子组件的手势,按照默认手势识别顺序进行识别。
IgnoreInternal屏蔽子组件的手势,包括子组件上系统内置的手势,如子组件为List组件时,内置的滑动手势同样会被屏蔽。 若父子组件区域存在部分重叠,则只会屏蔽父子组件重叠的部分。

响应手势事件

组件通过手势事件绑定不同GestureType的手势对象,各手势对象在响应手势操作的事件回调中提供手势相关信息。下面通过TapGesture手势对象的onAction事件响应点击事件,获取事件相关信息。其余手势对象的事件定义见各个手势对象章节。 若需绑定多种手势请使用 组合手势。

TapGesture事件说明

名称功能描述
onAction((event:GestureEvent) => void)Tap手势识别成功回调。

GestureEvent对象说明

名称类型描述
repeatboolean是否为重复触发事件,用于LongPressGesture手势触发场景。
offsetXnumber手势事件x轴相对当前组件元素原始区域的偏移量,单位为vp,用于PanGesture手势触发场景,从左向右滑动offsetX为正,反之为负。
offsetYnumber手势事件y轴相对当前组件元素原始区域的偏移量,单位为vp,用于PanGesture手势触发场景,从上向下滑动offsetY为正,反之为负。
anglenumber用于RotationGesture手势触发场景时,表示旋转角度。
用于SwipeGesture手势触发场景时,表示滑动手势的角度,即两根手指间的线段与水平方向的夹角变化的度数。
说明:
角度计算方式:滑动手势被识别到后,连接两根手指之间的线被识别为起始线条,随着手指的滑动,手指之间的线条会发生旋转,根据起始线条两端点和当前线条两端点的坐标,使用反正切函数分别计算其相对于水平方向的夹角,最后arctan2(cy2-cy1,cx2-cx1)-arctan2(y2-y1,x2-x1)为旋转的角度。以起始线条为坐标系,顺时针旋转为0到180度,逆时针旋转为-180到0度。
scalenumber缩放比例,用于PinchGesture手势触发场景。
pinchCenterXnumber捏合手势中心点相对于当前组件元素原始区域左上角x轴坐标,单位为vp,用于PinchGesture手势触发场景。
pinchCenterYnumber捏合手势中心点相对于当前组件元素原始区域左上角y轴坐标,单位为vp,用于PinchGesture手势触发场景。
speed8+number滑动手势速度,即所有手指相对当前组件元素原始区域滑动的平均速度,单位为vp/秒,用于SwipeGesture手势触发场景。
fingerList8+FingerInfo[]触发事件的所有手指信息,用于手势触发场景。
说明:
手指索引编号与位置对应,即fingerList[index]的id为index。先按下且未参与当前手势触发的手指在fingerList中对应位置为空。
timestamp8+number事件时间戳。
target8+EventTarget触发手势事件的元素对象显示区域。
source8+SourceType事件输入设备。
pressure9+number按压的压力大小。
tiltX9+number手写笔在设备平面上的投影与设备平面X轴的夹角。
tiltY9+number手写笔在设备平面上的投影与设备平面Y轴的夹角。
sourceTool9+SourceTool事件输入源。
velocityX10+number用于PanGesture手势中,获取当前手势的x轴方向速度。坐标轴原点为屏幕左上角,分正负方向速度,从左往右为正,反之为负。
velocityY10+number用于PanGesture手势中,获取当前手势的y轴方向速度。坐标轴原点为屏幕左上角,分正负方向速度,从上往下为正,反之为负。
velocity10+number用于PanGesture手势中,获取当前手势的主方向速度。为xy轴方向速度的平方和的算术平方根。

SourceType枚举说明

名称描述
Unknown未知设备。
Mouse鼠标。
TouchScreen触摸屏。

FingerInfo对象说明8+

名称类型描述
idnumber手指的索引编号。
globalXnumber相对于应用窗口左上角的x轴坐标。
globalYnumber相对于应用窗口左上角的y轴坐标。
localXnumber相对于当前组件元素原始区域左上角的x轴坐标。
localYnumber相对于当前组件元素原始区域左上角的y轴坐标。

SourceTool枚举说明9+

名称描述
Unknown未知输入源。
Finger手指输入。
Pen手写笔输入。

示例

// xxx.ets
@Entry
@Component
struct GestureSettingsExample {
  @State priorityTestValue: string = ''
  @State parallelTestValue: string = ''

  build() {
    Column() {
      Column() {
        Text('TapGesture:' + this.priorityTestValue).fontSize(28)
          .gesture(
            TapGesture()
              .onAction(() => {
                this.priorityTestValue += '\nText'
              }))
      }
      .height(200)
      .width(250)
      .padding(20)
      .margin(20)
      .border({ width: 3 })
      // 设置为priorityGesture时,点击文本会忽略Text组件的TapGesture手势事件,优先识别父组件Column的TapGesture手势事件
      .priorityGesture(
        TapGesture()
          .onAction((event?: GestureEvent) => {
            this.priorityTestValue += '\nColumn'
          }), GestureMask.IgnoreInternal)

      Column() {
        Text('TapGesture:' + this.parallelTestValue).fontSize(28)
          .gesture(
            TapGesture()
              .onAction(() => {
                this.parallelTestValue += '\nText'
              }))
      }
      .height(200)
      .width(250)
      .padding(20)
      .margin(20)
      .border({ width: 3 })
      // 设置为parallelGesture时,点击文本会同时触发子组件Text与父组件Column的TapGesture手势事件
      .parallelGesture(
        TapGesture()
          .onAction((event?: GestureEvent) => {
            this.parallelTestValue += '\nColumn'
          }), GestureMask.Normal)
    }
  }
}

zh-cn_image_0000001210195016

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(Harmony NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

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

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

相关文章

LVS负载均衡集群基础概念

目录 一、集群 1、集群概述 1.1 什么是集群 1.2 集群系统扩展方式 1.2.1 Scale UP(纵向扩展) 1.2.2 Scale OUT(横向扩展) 1.2.3 区别 1.3 分布式系统 1.4 分布式与集群 1.5 集群设计原则 1.6 集群设计实现 1.6.1 基础…

手回科技:人生的“小雨伞”,能否撑起自己的增长路?

有道是一年之计在于春。新年伊始,多家券商发布研报表达了对2024年保险市场表现的观点。 比如,开源证券表示,政策组合拳带来beta催化,保险业务端和弹性占优;中国银行证券指出,2024年,保险行业景…

Leetcode 第 125 场双周赛题解

Leetcode 第 125 场双周赛题解 Leetcode 第 125 场双周赛题解题目1:3065. 超过阈值的最少操作数 I思路代码复杂度分析 题目2:3066. 超过阈值的最少操作数 II思路代码复杂度分析 题目3:3067. 在带权树网络中统计可连接服务器对数目思路代码复杂…

Marin说PCB之POC电路layout设计仿真案例---01

最近娃哈哈饮料突然爆火,看新闻后才知道春晚的的时候宗老已经病的很严重了,现在也已经离我们而去了,宗老是一个值得我们尊敬爱戴的伟大企业家。于是乎小编我立马去他们的直播间买了一箱娃哈哈AD钙奶支持一下我们的国货。 中午午休的时候&…

智慧城市的未来:利用数字孪生技术推动智慧城市的智能化升级

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、城市规划与建设 2、城市管理与运营 3、公共服务与民生改善 4、应急管理与灾害防控 四、数字孪生技术推动智慧城市的智能化升级的价值 1、提高城市管理的智能化水平 2、优化城市资源配置 …

python将conda环境打入docker环境中

1.假设你本地已经安装好了conda相关的 ubuntu安装python以及conda-CSDN博客 并且已经创建启动过相关的环境,并且install了相关的包。 我本地的conda环境叫做,gptsovits_conda3 2.下载conda打包工具 conda install conda-pack pip install conda-pack 3.打包 con…

java八股文复习-----2024/03/04----基础

相关资源 大彬八股文 2024八股文 2024秋招八股文 1.了解Java的包装类型吗?为什么需要包装类? Java 是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将 int 、double 等类型…

lvs集群介绍

目录 一、LVS集群基本介绍 1、什么是集群 2、集群的类型 2.1 负载均衡群集(Load Balance Cluster) 2.2 高可用群集(High Availiablity Cluster) 2.3 高性能运算群集(High Performance Computing Cluster) 3、负载均衡集群的结构 ​编辑 4、LVS集群类型中的…

苹果电脑安装Android Studio和配置SDK

大家好,我是你们的好朋友咕噜铁蛋!今天,我们要来聊一聊关于《苹果电脑安装Android Studio和配置SDK》这个话题。对于使用苹果电脑的开发者来说,安装Android Studio并配置SDK可能会有些不同,但只要跟着我的指引&#xf…

Linux篇:基础IO

一 预备知识 1. 文件内容属性,内容与属性都是数据,都要在磁盘中保存。 2. 文件分为打开的文件和没打开的文件。 3. 进程在访问一个文件的时候,都是要先打开这个文件。打开文件之前,文件在磁盘,打开文件之后&#xff0…

基于OpenCV的图形分析辨认02

目录 一、前言 二、实验目的 三、实验内容 四、实验过程 一、前言 编程语言:Python,编程软件:vscode或pycharm,必备的第三方库:OpenCV,numpy,matplotlib,os等等。 关于OpenCV&…

【python 1】----Pytest基础知识

定义 用于编写和执行Python测试全功能测试框架(工具),是一个第三方库 安装 pip insatll pytest 安装pytest --version 校验 pytest的组成构成 不写调用语句也可以执行函数内容 在用例运行语句里面: -s:指的是开启与终端的…

【CSP试题回顾】201512-2-消除类游戏

CSP-201512-2-消除类游戏 解题思路 输入棋盘大小和颜色: 首先,程序从标准输入读取两个整数n和m,分别代表棋盘的行数和列数。然后,程序读取接下来的n行输入,每行包含m个整数,代表棋盘上每个方格中的棋子颜色。 初始化…

电子台账:通过标签颜色快速区分某月账页是否为空、是否锁定

目录 1 数据为空的账页,标签顶部没有标记色条 2 包含有效数据的账页且未进行锁定,标签顶部为深绿色标记色条 3 包含有效数据的账页且被锁定,标签顶部为橙色标记色条 通过设置账页标签的颜色,快速区分哪些月份的账页数据为空&am…

【书生·浦语大模型实战营】第6节 OpenCompass 大模型评测 课后作业

OpenCompass 大模型评测 0. 课程链接1. 课后作业1.1 基础作业1.2 进阶作业 2. 结业总结 0. 课程链接 链接:https://github.com/InternLM/tutorial/blob/main/opencompass/opencompass_tutorial.md 1. 课后作业 1.1 基础作业 使用 OpenCompass 评测 InternLM2-Cha…

python高级之元类

python高级之元类 一、Type创建类1、传统方式创建类2、非传统方式 二、元类三、总结 一、Type创建类 class A(object):def __init__(self, name):self.name namedef __new__(cls, *args, **kwargs):data object.__new__(cls)return data根据类创建对象 objA(‘kobe’) 1、执…

机器视觉相关网站推荐

机器视觉相关网站推荐 - 知乎计算机视觉(Computer Vision)最近这几年发展迅速,技术论坛和QQ群也如雨后春笋,特别是人脸检测/识别领域。近段时间云从君从研究院那里探得了好几个论坛,收藏了若干网站,记录下&…

领域驱动设计(Domain-Driven Design DDD)——战略设计2

二、保持模型的完整性 2、模式:Continuous Integration 定义一个Bounded Context后,必须让它保持合理。 当很多人在同一个Bounded Context中工作时,模型很容易发生分裂。团队越大,问题就越大,但即使是3、4个人的团队也…

状压dp详解,棋盘式、集合型,OJ详解

文章目录 零、引例-小国王1.问题描述2.暴力枚举3.多维dp4.维度压缩 一、状压dp1.认识状压dp2.棋盘式(基于连通性)2.1小国王2.1.1题目链接2.1.2思路分析2.1.3AC代码 2.2玉米田2.2.1题目链接2.2.2思路分析2.2.3AC代码 2.3炮兵阵地2.3.1题目链接2.3.2思路分析2.3.3AC代码 2.4蒙德里…

C++ 快速排序快速选择OJ

目录 1、75. 颜色分类 2、912. 排序数组 3、 215. 数组中的第K个最大元素 4、LCR 159. 库存管理 III 1、75. 颜色分类 思路:利用快速排序思路,使用三指针分块进行优化。 [0,left]——小于key[left1,right-1]——等于key[right,nums.size()]——大于k…