HarmonyOS--属性动画和显示动画

动画-组件参考(基于ArkTS的声明式开发范式)-ArkTS API参考 | 华为开发者联盟 (huawei.com)

在HarmonyOS的ArkUI开发框架中,动画主要分为两种类型:属性动画(Property Animation)和显示动画(Explicit Animation)。

属性动画

属性动画 是通过直接修改组件的样式属性并应用animation属性来实现动画效果。当开发者动态地更改一个组件(如Button、Image等)的尺寸、透明度、背景颜色等样式属性时,如果设置了相应的动画配置,ArkUI会自动填充这些属性变化过程中的每一帧画面,形成平滑的过渡效果。

例如,可以通过设置组件的animation属性来指定动画的执行方式,比如淡入淡出、大小变化等,并且可以控制动画的执行时长、缓动函数等参数。

TypeScript 复制代码
// ArkUI示例代码
//btn:动画start//  
Button('动画按钮')  
   .onClick(() => {  
      if (this.flag) {  
         this.btnWidth = 200  
         this.btnHeight = 50  
      }  
      else {  
         this.btnWidth = 100  
         this.btnHeight = 20  
      }  
      this.flag = !this.flag  // 调转标志位 实现动画循环  
  
   })  
   .width(this.btnWidth) // 改变宽度  
   .height(this.btnHeight) // 改变高度  
   .animation({  // 动画属性  
      duration:2000,  
      curve: Curve.EaseOut,  
      iterations: 1,  
      playMode: PlayMode.Normal,  
      tempo:2  
   })  
//btn:动画end//

但是需要注意的是,animation属性最好写在整体属性之后,尤其是设置动画的属性之后,属性动画-动画-组件参考(基于ArkTS的声明式开发范式)-ArkTS API参考 | 华为开发者联盟 (huawei.com)

显式动画

显示动画 则是通过调用全局动画方法如animateTo来明确指定一组动画操作。这种情况下,开发者需要手动编写动画序列,并明确开始和结束的状态,以及动画的具体行为。

TypeScript 复制代码
// ArkUI 示例代码(伪代码)
import { animateTo } from '@ohos/anim';

// 使用显式动画改变组件宽度
async function animateWidthChange(elementRef) {
  const startSize = elementRef.getWidth();
  const endSize = 200;

  // 创建动画参数对象
  const params = {
    duration: 500,
    timingFunction: 'linear',
    curve: '', // 可选的贝塞尔曲线
    delay: 0,
    iterations: 1,
    fillMode: '',
    direction: '',
    animations: [{
      property: 'width',
      value: [startSize, endSize],
    }],
  };

  // 执行动画
  await animateTo(elementRef, params);
}

总结来说,在ArkUI中,属性动画主要用于简单直观地处理单个或多个样式属性的变化,而显示动画则提供了更多的自定义选项和精细控制,能够创建更复杂的动画场景。

相关推荐
钛态2 分钟前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码20352 分钟前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码20353 分钟前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏3 分钟前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴5 分钟前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos
发现一只大呆瓜6 分钟前
深入浅出 AST:解密 Vite、Babel编译的底层“黑盒”
前端·面试·vite
左手厨刀右手茼蒿7 分钟前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos
雷帝木木7 分钟前
Flutter 三方库 http_client_interceptor 的鸿蒙化适配指南 - 实现原生 HttpClient 的全量请求拦截、支持端侧动态 Headers 注入与网络流量审计实战
flutter·harmonyos·鸿蒙·openharmony·http_client_interceptor
Augustine Electra7 分钟前
Flutter 三方库 memoize 的鸿蒙化实战 - 引入极简缓存引擎,避免重复计算,大幅提升鸿蒙应用渲染性能,让你的高刷体验更稳更丝滑。
flutter·缓存·harmonyos
娇娇yyyyyy10 分钟前
QT编程(17): Qt 实现自定义列表模型
开发语言·qt