「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation 组件基础

在应用开发中,动画效果可以增强用户体验。鸿蒙框架提供了 translatescalerotate 等动画功能,允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。


关键词
  • Animation 组件
  • 动画效果
  • 位置动画
  • 自动动画
  • 缩放动画

一、Animation 组件概述

鸿蒙的 Animation 组件支持多种动画效果,如平移、缩放和旋转。通过动态控制这些属性的变化,可以实现组件在界面中的流畅动画效果。以下实例演示这些基础动画的实现。


二、创建简单动画
2.1 自动位移动画

通过 translate 属性实现组件的自动平移效果,可以控制 xy 轴的偏移量,使组件自动左右或上下移动。定时器可用于定期触发动画。

typescript 复制代码
@Entry
@Component
export struct AutoTranslateAnimation {
  @State private x: number = 0

  build() {
    Column() {
      // 图片组件,应用平移动画
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .translate({ x: this.x }) // 根据 x 状态变量实现水平平移
        .transition({ opacity: 0.5 }) // 设置透明度过渡效果

      Button('开始自动移动')
        .onClick(() => this.startAutoMove()) // 按钮开始自动动画
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }

  // 定义自动平移函数
  startAutoMove() {
    setInterval(() => {
      this.x = this.x === 0 ? 200 : 0; // 切换位置
    }, 1000); // 每1秒切换位置,实现自动平移
  }
}

效果示例:点击"开始自动移动"按钮后,图片每隔 1 秒在 x 轴上来回移动。


2.2 自动缩放动画

通过 scale 属性设置组件的自动缩放比例,控制 xy 轴的比例可以实现放大或缩小效果。

typescript 复制代码
@Entry
@Component
export struct AutoScaleAnimation {
  @State private scale1: number = 1

  build() {
    Column() {
      // 图片组件,应用缩放动画
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .scale({ x: this.scale1, y: this.scale1 }) // 根据 scale1 实现缩放效果
        .transition({ opacity: 0.8 }) // 设置透明度过渡效果
        .margin(50)

      Button('开始自动缩放')
        .onClick(() => this.startAutoScale()) // 按钮开始自动缩放动画
    }
    .width('100%')
    .height('100%')
  }

  // 定义自动缩放函数
  startAutoScale() {
    setInterval(() => {
      this.scale1 = this.scale1 === 1 ? 1.5 : 1; // 切换缩放比例
    }, 1000); // 每1秒切换缩放,实现自动缩放
  }
}

效果示例:点击"开始自动缩放"按钮后,图片每隔 1 秒在 1 倍和 1.5 倍之间切换。


2.3 自动旋转动画

通过 rotate 属性控制组件的旋转角度,结合定时器可以实现自动旋转效果。

typescript 复制代码
@Entry
@Component
export struct AutoRotateAnimation {
  @State private rotation: number = 0

  build() {
    Column() {
      // 图片组件,应用旋转动画
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .rotate({ angle: this.rotation }) // 根据 rotation 实现旋转效果
        .transition({ opacity: 0.8 }) // 设置透明度过渡效果
        .margin(50)

      Button('开始自动旋转')
        .onClick(() => this.startAutoRotate()) // 按钮开始自动旋转动画
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }

  // 定义自动旋转函数
  startAutoRotate() {
    setInterval(() => {
      this.rotation += 45; // 每次增加45度实现旋转
    }, 1000); // 每1秒旋转一次
  }
}

效果示例:点击"开始自动旋转"按钮后,图片每隔 1 秒顺时针旋转 45 度。


三、组合自动动画示例

可以通过同时控制 translatescalerotate 属性,实现多个动画效果的自动组合,创建更复杂的视觉效果。

typescript 复制代码
@Entry
@Component
export struct AutoCombinedAnimationComponent {
  @State private x: number = 0
  @State private scale1: number = 1
  @State private rotation: number = 0

  build() {
    Column() {
      // 图片组件,应用组合动画效果
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .translate({ x: this.x }) // 平移
        .scale({ x: this.scale1, y: this.scale1 }) // 缩放
        .rotate({ angle: this.rotation }) // 旋转
        .transition({ opacity: 0.8 }) // 设置透明度过渡效果
        .margin(50)

      Button('开始自动组合动画')
        .onClick(() => this.startAutoCombinedAnimation()) // 按钮触发自动组合动画
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }

  // 定义自动组合动画函数
  startAutoCombinedAnimation() {
    setInterval(() => {
      this.x = this.x === 0 ? 50 : 0; // 切换位置
      this.scale1 = this.scale1 === 1 ? 1.5 : 1; // 切换缩放比例
      this.rotation += 45; // 每次增加旋转角度
    }, 1000); // 每1秒切换动画效果
  }
}

效果示例 :点击"开始自动组合动画"按钮后,图片将每隔 1 秒自动产生平移、缩放和旋转的组合动画效果。


小结

本篇介绍了鸿蒙 Animation 组件的基础用法,并通过多个实例展示了 translatescalerotate 等动画效果的实现。通过合理运用这些基础动画,可以轻松创建自动化的动画效果,让界面更加生动有趣。


下一篇预告

下一篇将深入探讨高级动画效果和缓动控制,学习如何创建更自然的动画效果,进一步提升界面表现力。


上一篇: 「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
下一篇: 「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

相关推荐
xuanwenchao1 小时前
Mac M1/M2/M3/M4/M5芯片-系统安装Ubuntu
linux·ubuntu·macos
WMSmile3 小时前
macOS 上安装 Wails 3(wails3)步骤
macos
Geek_Vision4 小时前
鸿蒙原生APP接入小程序运行能力:数字园区场景实战复盘
微信小程序·harmonyos
音视频牛哥4 小时前
鸿蒙 NEXT 下 RTSP/RTMP 播放器如何调用录像与快照?
华为·harmonyos·鸿蒙rtmp播放器·鸿蒙rtsp播放器·鸿蒙next rtsp播放器·鸿蒙next rtmp播放器·鸿蒙rtsp rtmp流录像
音视频牛哥4 小时前
鸿蒙 NEXT 下 RTSP/RTMP 播放器如何实时调节音量、亮度、对比度与饱和度?
harmonyos·音视频开发·直播
不会写程序的未来程序员5 小时前
nvm 安装教程:Node.js 版本管理全攻略 (Win/Mac/Linux) + .nvmrc 实战
linux·macos·node.js·前端开发·环境配置·nvm
2501_916007475 小时前
iOS逆向工程:详细解析ptrace反调试机制的破解方法与实战步骤
android·macos·ios·小程序·uni-app·cocoa·iphone
音视频牛哥5 小时前
鸿蒙 NEXT RTSP/RTMP 播放器如何回调 RGB 数据并实现 AI 视觉算法分析
人工智能·算法·harmonyos·鸿蒙rtmp播放器·鸿蒙rtsp播放器·鸿蒙next rtsp播放器·鸿蒙next rtmp播放器
音视频牛哥6 小时前
HarmonyOS鸿蒙 Next 中如何实现低延迟 RTSP 流媒体播放?
华为·harmonyos·鸿蒙next·鸿蒙rtmp播放器·鸿蒙rtsp播放器·鸿蒙next rtsp播放器·鸿蒙next rtmp播放器
不过如此19516 小时前
pyinstaller打包GUI项目实践
windows·python·ui