HarmonyOS7 手势综合展示:六种手势类型一网打尽 + Grid 数据看板
文章目录前言效果展示方案设计多层手势共存策略详细实现状态变量日志函数Grid 统计看板statCard Builder三层手势绑定滑动方向判定日志面板踩坑记录写在最后前言前面十几篇文章分别讲了 ArkUI 的各种手势类型今天来一个全家桶——把点击、长按、双击、拖拽、缩放、旋转、滑动全部集成到一个界面里用 Grid 布局做数据看板实时显示每种手势的触发次数和状态。这篇文章既是手势系列的总结也是一个手势调试工具的设计参考。效果展示界面分三个区域统计看板6 个 Grid 格子分别显示点击/长按/双击/滑动/拖拽/缩放的计数或状态测试区域一个大色块支持所有手势操作日志面板记录最近 8 条手势操作的时间线方案设计多层手势共存策略一个组件上要同时支持 7 种手势怎么组织答案是分三层层级手势模式第一层双击、单击、长按Exclusive互斥第二层拖拽、缩放、旋转Parallel并行| 第三层 | 快速滑动 | 独立绑定 |三层手势用三个.gesture()调用分别绑定。ArkUI 允许多次调用.gesture()后面的不会覆盖前面的。详细实现状态变量EntryComponentstruct GestureShowcase{StatetapCount:number0StatelongPressCount:number0StateswipeDirection:string-StatepanOffset:string(0, 0)StatescaleValue:number1StateangleValue:number0StatedoubleTapCount:number0StategestureLog:string[][]// ...}每种手势对应一个状态变量gestureLog记录操作日志。日志函数logGesture(name:string){consttimenewDate().toLocaleTimeString()this.gestureLog.unshift([${time}]${name})if(this.gestureLog.length8){this.gestureLog.pop()}}每次手势触发时调用新日志插入数组头部超过 8 条就移除最旧的。unshiftpop组合实现了固定长度的 FIFO 队列。Grid 统计看板Grid(){GridItem(){this.statCard(点击,${this.tapCount},#4D96FF)}GridItem(){this.statCard(长按,${this.longPressCount},#FF6B6B)}GridItem(){this.statCard(双击,${this.doubleTapCount},#9B59B6)}GridItem(){this.statCard(滑动,this.swipeDirection,#6BCB77)}GridItem(){this.statCard(拖拽,this.panOffset,#FFA500)}GridItem(){this.statCard(缩放,${Math.floor(this.scaleValue*100)}%,#4ECDC4)}}.columnsTemplate(1fr 1fr 1fr).rowsTemplate(1fr 1fr).rowsGap(8).columnsGap(8).width(100%).height(160).margin({bottom:16})3 列 2 行的 Grid 布局每个格子用Builder函数statCard统一渲染。statCard BuilderBuilderstatCard(label:string,value:string,color:string){Column(){Text(value).fontSize(18).fontWeight(FontWeight.Bold).fontColor(color)Text(label).fontSize(10).fontColor(#999999).margin({top:2})}.width(100%).height(100%).backgroundColor(#F8F8F8).borderRadius(8).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}Builder是 ArkUI 的自定义构建函数可以在组件的build()方法里调用。这里传入标签、数值和颜色生成统一风格的统计卡片。三层手势绑定Column(){Text(手势测试区域).fontSize(16).fontColor(#FFFFFF)Text(点击/长按/双击/拖动/缩放/旋转).fontSize(11).fontColor(#FFFFFF).opacity(0.8)}.width(100%).height(140).backgroundColor(#667eea).borderRadius(16).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).scale({x:this.scaleValue,y:this.scaleValue}).rotate({angle:this.angleValue})// 第一层互斥手势.gesture(GestureGroup(GestureMode.Exclusive,TapGesture({count:2}).onAction((){this.doubleTapCountthis.logGesture(双击)}),TapGesture({count:1}).onAction((){this.tapCountthis.logGesture(单击)}),LongPressGesture({duration:500}).onAction((){this.longPressCountthis.logGesture(长按)})))// 第二层并动手势.gesture(GestureGroup(GestureMode.Parallel,PanGesture({direction:PanDirection.All}).onActionUpdate((event:GestureEvent){this.panOffset(${Math.floor(event.offsetX)},${Math.floor(event.offsetY)})}).onActionEnd((){this.logGesture(拖拽)}),PinchGesture({fingers:2}).onActionUpdate((event:GestureEvent){this.scaleValueevent.scale}).onActionEnd((){this.logGesture(缩放)}),RotationGesture({fingers:2}).onActionUpdate((event:GestureEvent){this.angleValueevent.angle}).onActionEnd((){this.logGesture(旋转)})))// 第三层滑动手势.gesture(SwipeGesture({direction:SwipeDirection.All}).onAction((event:GestureEvent){constangleevent.angle??0if(angle45angle135)this.swipeDirection↑elseif(angle135angle225)this.swipeDirection←elseif(angle225angle315)this.swipeDirection↓elsethis.swipeDirection→this.logGesture(滑动)}))这段代码是手势系列知识的大综合。注意scale和rotate直接绑在组件上缩放和旋转操作能实时看到效果。滑动方向判定constangleevent.angle??0if(angle45angle135)this.swipeDirection↑elseif(angle135angle225)this.swipeDirection←elseif(angle225angle315)this.swipeDirection↓elsethis.swipeDirection→把 360° 分成四个 90° 的扇区每个扇区对应一个方向。比之前的左/右二分法更精细。日志面板Column(){Text(手势日志).fontSize(13).fontWeight(FontWeight.Bold).margin({bottom:8})ForEach(this.gestureLog,(log:string){Text(log).fontSize(11).fontColor(#999999).margin({bottom:2})})}.width(100%).margin({top:16}).padding(12).backgroundColor(#F8F8F8).borderRadius(8)时间戳 手势名称的列表最多 8 条。类似开发者工具的日志面板。踩坑记录问题原因解决双击不触发被单击抢走了双击写在单击前面Exclusive 模式按顺序判定拖拽和滑动冲突两者都是水平/垂直滑动用速度区分SwipeGesture 有速度阈值缩放后面板数字跳动缩放影响了布局只影响测试区域不影响统计面板多次调用.gesture()时手势之间的优先级取决于绑定顺序。先绑定的优先级高。如果发现某种手势死活触发不了检查一下是不是被另一个手势抢了。写在最后这个综合案例把手势系列的所有知识点串在了一起。核心设计思路是分层管理——互斥的放一层并行的放一层独立的放一层。配合 Grid 看板和日志面板不仅能验证手势是否正常工作还能直观看到每种手势的触发情况。做手势密集的界面时建议也做一个类似的调试面板开发效率会高很多。

相关新闻

自动化专业毕业能干什么?制造业、控制、软件、数据怎么选

自动化专业毕业能干什么?制造业、控制、软件、数据怎么选

最近很多自动化大三、大四的同学都在焦虑求职,看着五花八门的就业赛道完全不知道怎么选、怕选错行业踩坑。我本人是自动化专业出身,从业七年,身边全是本专业就业、转行的同学,踩过很多择业误区,今天给大家讲透自动化四…

2026/7/23 22:17:39阅读更多 →
HarmonyOS7 属性动画基础:animateTo 驱动透明度与位移动画

HarmonyOS7 属性动画基础:animateTo 驱动透明度与位移动画

文章目录前言基础概念animateTo vs .animation()从简到繁透明度动画位移动画组合复位代码详解完整状态管理动画目标组件按钮控制面板实时数值显示Curve 曲线对比常见问题进阶技巧写在最后前言 ArkUI 有两种动画模式:声明式动画(.animation()&#xff09…

2026/7/23 22:17:39阅读更多 →
FreeRDP曝高危堆缓冲区溢出漏洞:wfreerdp客户端遭弃用,远程代码执行风险急剧上升

FreeRDP曝高危堆缓冲区溢出漏洞:wfreerdp客户端遭弃用,远程代码执行风险急剧上升

开源远程桌面协议实现FreeRDP最近爆出一记重锤。安全研究团队对外公开了完整的漏洞细节,连带概念验证代码也一并放出。这意味着全球范围内依赖这款工具进行日常远程运维的企业和个人,正面临一场实打实的安全风暴。 这个漏洞的棘手之处在于,它…

2026/7/23 22:17:39阅读更多 →
剪映作品复盘表怎么做?零基础先检查字幕、封面和节奏

剪映作品复盘表怎么做?零基础先检查字幕、封面和节奏

短视频剪辑不是只会剪掉多余片段就够了。对零基础来说,更重要的是建立一张作品复盘表:每做完一个作品,都用同一套标准检查字幕、封面、节奏、音频和导出。 这类内容放在 CSDN 上,不适合写“怎么快速涨粉”,更适合写成…

2026/7/23 23:40:04阅读更多 →
Python中str、list、tuple、dict、set 五大内置数据结构详解

Python中str、list、tuple、dict、set 五大内置数据结构详解

初学 Python,最先要攻克的就是内置数据结构!字符串、列表、元组、字典、集合贯穿我们几乎所有代码。很多人只会基础增删改查,遇到场景选型就一脸迷茫:什么时候用列表?什么时候选元组?集合去重原理是什么&am…

2026/7/23 23:40:04阅读更多 →
超节点成国产算力新宠!技术路线多样,光互连2028年或成主流

超节点成国产算力新宠!技术路线多样,光互连2028年或成主流

超节点成展会“明星展品”今年世界人工智能大会(WAIC 2026)主展区上海世博展览馆里,几排两三米高、通体黑色的机柜前总是围着人。有人凑近看液冷管路,有人举手机拍高速线缆,还有人追问工作人员机柜算力能算什么。华为A…

2026/7/23 23:40:04阅读更多 →
职场英语学习计划Day018

职场英语学习计划Day018

🌟计划1:📅学习时间:2026.7.19 周日内容:视频17主题:English at Work Episode 17: Lemon-sized luxury boxes How to place an order消耗时长:学新复习 共 19 min▶ It’s stopped now anyway. …

2026/7/23 23:40:04阅读更多 →
支付系统框架学习实战:架构思维与踩坑心得

支付系统框架学习实战:架构思维与踩坑心得

支付系统设计实战:架构思维与踩坑心得从零接入支付 SDK 到上线稳定运行,聊聊那些比写代码更重要的设计决策。前言 最近独立负责了一个后端支付系统的 SDK 集成工作。回头看整个过程,真正花时间的不是写代码——HTTP 调一下、回调接一下、签名…

2026/7/23 23:40:04阅读更多 →
Mend SCA 解析:从漏洞扫描到 AI 自动化修复

Mend SCA 解析:从漏洞扫描到 AI 自动化修复

一、SCA 正在从"漏洞匹配"走向"风险决策" 软件成分分析(Software Composition Analysis,SCA)最初解决的问题很简单:识别项目中使用了哪些开源组件,以及这些组件是否存在已知漏洞。 但随着开源生态…

2026/7/23 23:38:03阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →