HarmonyOS7 脉冲动画:循环缩放效果的实现与踩坑
文章目录前言反面教材正确姿势状态定义脉冲动画元素核心循环逻辑停止脉冲原理解析为什么放大用 EaseOut缩小用 EaseIn透明度配合的妙处实践清单写在最后前言有一种动画效果你肯定见过——微信语音消息旁边那个绿色圆圈一直在放大缩小像在呼吸一样。这叫脉冲动画Pulse Animation常见于消息提醒、定位按钮、录音状态指示等场景。脉冲动画看起来简单不就是放大再缩小吗但真正做起来有几个细节容易踩坑。今天就来聊聊在 ArkUI 里怎么实现一个靠谱的脉冲动画。反面教材先看一个典型的错误写法// 错误直接用 .animation 的 iterations 参数Column().scale({x:this.pulseScale,y:this.pulseScale}).animation({duration:600,iterations:-1,// 无限循环curve:Curve.EaseInOut})这个写法理论上没问题.animation的iterations: -1确实可以让动画无限循环。但有个致命问题——你没法在循环过程中动态控制动画的暂停和恢复。一旦跑起来就停不下来了。所以我们需要用setTimeout手动管理循环。正确姿势状态定义EntryComponentstruct PulseAnimation{StatepulseScale:number1StatepulseOpacity:number1StateisPulsing:booleanfalseprivatepulseTimer:number-1build(){Column(){// ...}}}isPulsing是一个控制标记用来决定循环是否继续。脉冲动画元素Stack(){Column().width(60).height(60).backgroundColor(#4D96FF).borderRadius(30).scale({x:this.pulseScale,y:this.pulseScale}).opacity(this.pulseOpacity).animation({duration:600,curve:Curve.EaseInOut})Text(P).fontSize(22).fontColor(#FFFFFF).fontWeight(FontWeight.Bold)}.width(80).height(80)用Stack把脉冲圆圈和文字叠在一起。圆圈做动画文字保持不动——这样视觉效果是圆圈在脉冲文字不动。核心循环逻辑Button(开始脉冲).onClick((){if(this.isPulsing)returnthis.isPulsingtrueconstpulse(){if(!this.isPulsing){this.pulseScale1this.pulseOpacity1return}// 阶段1放大 变透明animateTo({duration:600,curve:Curve.EaseOut},(){this.pulseScale1.3this.pulseOpacity0.5})// 阶段2缩小 恢复不透明setTimeout((){animateTo({duration:600,curve:Curve.EaseIn},(){this.pulseScale1this.pulseOpacity1})// 延迟200ms后开始下一轮if(this.isPulsing)setTimeout(pulse,200)},600)}pulse()})这个递归函数的执行流程检查isPulsing标记如果为false就停下来并恢复初始状态用animateTo执行放大 变透明600ms等 600ms 后用animateTo执行缩小 恢复600ms再等 200ms 的间隔然后递归调用自身每一轮脉冲的总时长是600 600 200 1400ms。停止脉冲Button(停止脉冲).onClick((){this.isPulsingfalse})停止时只需要把isPulsing设为false。当前一轮动画跑完后递归函数检查到标记变化就会自动退出。原理解析为什么放大用 EaseOut缩小用 EaseIn这不是随便选的放大阶段用Curve.EaseOut快速开始放大然后慢慢减速到最大。视觉上像是弹出去缩小阶段用Curve.EaseIn慢慢开始缩小然后加速回到原位。视觉上像是弹回来这两段曲线拼在一起就形成了一个自然的弹性脉冲效果。透明度配合的妙处只做缩放的话脉冲效果看起来像个弹簧。加上透明度变化后放大时变透明缩小时恢复不透明视觉上更像一个发光脉冲或者雷达扫描。实践清单实现脉冲动画时的检查清单用isPulsing标记控制循环不要用iterations: -1放大和缩小用不同的动画曲线配合透明度变化增加质感停止脉冲时恢复初始状态防止重复启动if (this.isPulsing) return写在最后脉冲动画的核心就是用递归setTimeout来手动管理循环而不是依赖.animation的iterations参数。虽然代码多几行但换来了完全的控制权——想停就停想变就变。这种手动循环的思路不只适用于脉冲动画后面聊到的呼吸灯、加载动画也会用到同样的模式。

相关新闻

HarmonyOS7 页面切换动画:自己手搓一个 Tab 过渡效果

HarmonyOS7 页面切换动画:自己手搓一个 Tab 过渡效果

文章目录前言为什么不用原生 Tabs核心实现状态定义Tab 栏的实现内容区域滑动方向的判断优化建议写在最后前言 ArkUI 自带的 Tabs 组件切换页面时是有默认过渡效果的,但有时候设计师给的方案比较特殊,默认的 Tabs 满足不了需求。这时候就得自己实现页面切…

2026/7/24 21:10:17 阅读更多 →
LinkSwift:九大网盘直链解析的终极技术实现指南

LinkSwift:九大网盘直链解析的终极技术实现指南

LinkSwift:九大网盘直链解析的终极技术实现指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…

2026/7/24 21:09:17 阅读更多 →
FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上

FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上

FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的全英文界面而烦恼吗&am…

2026/7/24 21:09:17 阅读更多 →

最新新闻

好用的离子风机联网实时监控软件

好用的离子风机联网实时监控软件

在电子制造、半导体、精密仪器及新能源等领域的生产过程中,静电放电(ESD)控制是保障产品良率和设备安全的重要环节。离子风机作为最常见的静电消除设备,其运行状态直接影响ESD防护效果。然而,传统人工巡检方式存在数据…

2026/7/24 21:17:19 阅读更多 →
ROS1的痛点——为什么行业必须迁移到ROS2

ROS1的痛点——为什么行业必须迁移到ROS2

上一篇讲了ROS的历史,这篇深入聊聊ROS1到底有哪些问题,以及为什么这些问题在工业场景下是致命的。 面试的时候这个问题很常见:"ROS1有什么缺点?ROS2是怎么解决的?"如果你只能回答"ROS1有master节点是单…

2026/7/24 21:17:19 阅读更多 →
ROS的前世今生——从ROS1到ROS2的进化逻辑

ROS的前世今生——从ROS1到ROS2的进化逻辑

面试的时候被问:"你知道ROS吗?"我说知道。"那ROS和ROS2有什么区别?"我说"ROS2是升级版"。面试官笑了笑,没再追问。 后来才知道,这个问题考的不是你背没背过版本差异,而是看…

2026/7/24 21:17:19 阅读更多 →
CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用

CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用

上篇聊了clang-tidy、cppcheck这些代码质量工具,最后提到要把它们串进CI流水线。今天就把CI/CD这件事展开讲透。 面试的时候被问:"你们代码提交之后,怎么保证编译通过、测试能跑?" 我当时说"本地跑一遍&#xff…

2026/7/24 21:17:19 阅读更多 →
代码质量工具——clang-tidy/cppcheck和机器人代码规范

代码质量工具——clang-tidy/cppcheck和机器人代码规范

面试的时候被问:"你们团队怎么保证代码质量?" 我当时说了句"靠code review"。面试官点点头,又问:"除了人工review,有没有用什么自动化工具?"我又卡了。 后来进了一个正规团…

2026/7/24 21:17:19 阅读更多 →
格鲁吉亚名义雇主的雇佣方式对企业全球扩展的影响

格鲁吉亚名义雇主的雇佣方式对企业全球扩展的影响

本文将围绕格鲁吉亚名义雇主的雇佣方式展开讨论、重点阐述其如何推动企业的全球扩展。名义雇主成为一种灵活的雇佣模式、能够帮助企业快速适应新等市场环境,规避合规风险。通过与当地名义雇主合作,如万领钧Knit People,企业可以简化招聘过程、…

2026/7/24 21:16:19 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

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

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

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

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/24 18:52:18 阅读更多 →

月新闻