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

HarmonyOS 6 UIContext 关键帧动画 keyframeAnimateTo 使用文档

文章目录

    • 接口功能
    • 接口定义与参数
      • 1. 接口签名
      • 2. 参数详解
        • (1)KeyframeAnimateOptions(全局动画配置)
        • (2)keyframes: Array\<Keyframe>(关键帧数组)
    • 完整示例
    • 代码执行流程
    • 使用规范
      • 1. UIContext 获取规范
      • 2. 状态变量绑定规范
      • 3. 动画参数最佳实践
      • 总结

接口功能

UIContext.keyframeAnimateTo是 HarmonyOS 提供的关键帧动画核心接口,用于实现多阶段连续动画,支持自定义每段动画的时长、属性变化,同时可配置动画循环次数、帧率范围等全局参数,实现比普通动画更灵活的复杂动效。

核心能力:

  1. 定义多段连续的关键帧动画(如放大→缩小→放大循环);
  2. 配置动画整体循环次数;
  3. 自定义动画执行的帧率范围,优化性能;
  4. 绑定 UI 上下文,确保动画与组件生命周期同步。

接口定义与参数

1. 接口签名

keyframeAnimateTo(options:KeyframeAnimateOptions,keyframes:Array<Keyframe>):void

2. 参数详解

(1)KeyframeAnimateOptions(全局动画配置)

控制整个关键帧动画的通用属性,示例中使用核心配置:

参数名类型说明
iterationsnumber动画整体循环次数,示例中设置为3,代表完整执行所有关键帧3次
expectedFrameRateRangeFrameRateRange期望帧率范围,约束动画执行的帧率,平衡流畅度与性能
  • FrameRateRange 子参数:
    • min:最小帧率(示例:10)
    • max:最大帧率(示例:120)
    • expected:目标帧率(示例:60,标准流畅帧率)
(2)keyframes: Array<Keyframe>(关键帧数组)

多段动画的核心配置,数组中每一个对象代表一段独立的动画,按顺序执行。

Keyframe 核心参数:

参数名类型说明
durationnumber当前段动画的执行时长,单位:毫秒(ms)
eventfunction当前段动画的属性变化回调,在回调中修改组件状态变量,驱动动画执行

完整示例

// xxx.etsimport{UIContext}from'@kit.ArkUI';@Entry@Componentstruct KeyframeDemo{@StatemyScale:number=1.0;uiContext:UIContext|undefined=undefined;aboutToAppear(){this.uiContext=this.getUIContext?.();}build(){Column(){Circle().width(100).height(100).fill("#46B1E3").margin(100).scale({x:this.myScale,y:this.myScale}).onClick(()=>{if(!this.uiContext){console.info("no uiContext, keyframe failed");return;}this.myScale=1;// 设置关键帧动画整体播放3次this.uiContext.keyframeAnimateTo({iterations:3,expectedFrameRateRange:{min:10,max:120,expected:60,}},[{// 第一段关键帧动画时长为800ms,scale属性做从1到1.5的动画duration:800,event:()=>{this.myScale=1.5;}},{// 第二段关键帧动画时长为500ms,scale属性做从1.5到1的动画event:()=>{this.myScale=1;}}]);})}.width('100%').margin({top:5})}}

运行效果如图:

代码执行流程

  1. 组件初始化aboutToAppear生命周期中获取当前组件的UIContext并赋值,为动画执行做准备;
  2. 交互触发:点击圆形组件,先校验UIContext是否有效,无效则打印日志并终止;
  3. 初始化状态:重置缩放比例myScale = 1,保证动画起始状态一致;
  4. 执行关键帧动画
    • 全局配置:动画循环3次,帧率 10~120,目标60帧;
    • 第一段(800ms):组件从原始大小放大到 1.5倍;
    • 第二段(500ms):组件从1.5倍缩小回原始大小;
    • 「放大→缩小」为一个完整周期,重复执行3次后动画结束。

使用规范

1. UIContext 获取规范

  • 必须在组件生命周期aboutToAppear中调用this.getUIContext()获取;
  • 执行动画前必须判空,避免空对象导致动画失败(示例中已做判空处理)。

2. 状态变量绑定规范

  • 驱动动画的变量(如myScale)必须用@State装饰;
  • 仅在event回调中修改该变量,禁止在回调外直接修改干扰动画。

3. 动画参数最佳实践

  • 帧率配置:expected推荐 60,保证流畅度;min不低于10,避免卡顿;
  • 循环次数:iterations为正整数,设置为0无动画,设置为-1无限循环(官方支持);
  • 时长配置:单段动画时长建议 ≥100ms,避免动画过快无视觉效果。

总结

  1. keyframeAnimateTo多阶段关键帧动画专用接口,依赖UIContext执行;
  2. 核心分为全局配置(循环次数、帧率)+关键帧数组(多段动画)
  3. 必须在aboutToAppear获取上下文,在event中修改状态变量驱动动画;

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力

http://www.jsqmd.com/news/783842/

相关文章:

  • 基于Next.js与GPT的AI法律文书生成器:私有化部署与Prompt工程实践
  • CANN/atvoss ATVOSS开发快速入门
  • 基于Python爬虫的自动化求职监控系统:从原理到实践
  • 6个国内免版权的音乐网站,剪辑师速存! - 拾光而行
  • 联邦学习破局关键:深入解析非IID数据(2026实战指南)
  • 【深度揭秘】亨得利宝珀机芯维修工艺全解析:技术特点、保养价格与避坑指南(2026年5月全国门店版) - 亨得利腕表维修中心
  • AutoTeam:基于状态机与Playwright的ChatGPT Team自动化管理工具实践
  • CANN/ops-cv快速安装指南
  • CANN/sip Cgerc运算示例
  • 2026年广东二手PCB设备回收处置完全指南:从闲置到增效的资源第二生命 - 年度推荐企业名录
  • 新用户注册Taotoken后快速上手完成第一个API调用的全流程
  • PocketLantern:为AI编码助手提供实时技术决策事实核查
  • CANN/DeepSeek-V3.2-Exp配置说明
  • 基于Better Auth的全栈SaaS UI组件库:快速构建认证与支付系统
  • Android多模型AI聊天聚合器:基于Jetpack Compose的隐私优先应用开发实践
  • 基于Python的Claude Telegram Bot服务端:架构设计与部署实战
  • DS4Windows终极指南:5个步骤让PS4手柄在Windows上完美重生
  • 全国手板加工与CNC手板制造,珠三角“一站式”服务商成企业首选 - 深度智识库
  • 基于LLM与向量数据库的智能消息代理系统设计与实现
  • 如何用智能游戏助手彻底告别重复操作:鸣潮自动化工具终极指南
  • 2026年广东二手PCB设备买卖全攻略:从翻新陷阱到整厂搬迁一站式解决方案 - 年度推荐企业名录
  • 微服务架构演进:从单体到分布式,架构师十年实战经验分享
  • GT收发器64B66B协议避坑指南:搞懂Gearbox和Block Sync,告别数据对齐失败
  • 为AI编码助手注入Vue与Nuxt最佳实践:提升开发效率与代码质量
  • 青少年AI夏令营实践:拆掉AI神秘围墙的三天探索之旅
  • 别再踩坑了!Java中BigDecimal用字符串初始化的3个真实场景和1个血泪教训
  • AlphaRank与DCR融合:破解亿级数据排序与探索利用难题
  • 半导体行业展会推荐汇总,中国半导体展优选,助力企业洞察行业前沿 - 品牌2026
  • CANN/catlass: Block Epilogue Visitor 偏特化
  • LLM 模型图模式改造指南