「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

简介: 高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。

高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。

20241031_233422.gif


关键词
  • 高级动画
  • 弹性缓动
  • 自动动画
  • 缓动曲线

一、Animation 组件的高级缓动曲线

缓动曲线(Easing Curve)控制动画在不同阶段的速度变化,创造更自然的动画效果。鸿蒙提供了多种缓动类型,以下示例演示带有弹性效果的自动位移动画。


二、自动弹性动画

弹性动画模拟物理弹簧运动效果,以下代码展示带弹性缓动效果的左右自动位移动画。

2.1 弹性位移动画示例
@Entry
@Component
export struct ElasticAutoAnimation {
   
  @State private x: number = 0; // x 轴位置初始状态

  build() {
   
    Column() {
   
      // 图片组件,应用弹性缓动动画
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .translate({
    x: this.x }) // 应用平移动画
        .transition({
    opacity: 0.8 }) // 设置透明度过渡效果
        .margin(50)

      Button('启动弹性动画') // 按钮触发弹性动画
        .onClick(() => this.startElasticAnimation())
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center);
  }

  // 自动执行弹性动画的函数
  startElasticAnimation() {
   
    let step = 0;
    let amplitude = 200; // 初始弹跳幅度
    const interval = setInterval(() => {
   
      this.x = amplitude * Math.sin(step * Math.PI / 20); // 弹性公式实现位置更新
      amplitude *= 0.9; // 减小幅度
      step++;

      // 结束条件:当幅度足够小或完成足够多的步长时停止动画
      if (amplitude < 1) {
   
        clearInterval(interval);
      }
    }, 50); // 50ms的间隔
  }
}

效果示例:点击“启动弹性动画”按钮,图片会左右移动,幅度逐渐减小,形成弹性效果。

20241031_232802.gif


三、透明度渐入渐出动画

透明度的渐入渐出效果适用于页面切换或加载动画。动态调整 opacity1 属性可以实现柔和的淡入淡出效果。

3.1 自动透明度动画示例
@Entry
@Component
export struct AutoFadeAnimation {
   
  @State private opacity1: number = 1; // 透明度初始状态

  build() {
   
    Column() {
   
      // 图片组件,应用透明度渐变动画
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .opacity(this.opacity1) // 动态调整透明度
        .margin(50)

      Button('启动渐入渐出') // 按钮触发透明度动画
        .onClick(() => this.startFadeAnimation())
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center);
  }

  // 自动执行渐入渐出动画的函数
  startFadeAnimation() {
   
    setInterval(() => {
   
      this.opacity1 = this.opacity1 === 1 ? 0.2 : 1; // 在透明与不透明之间切换
    }, 800); // 每 800ms 切换透明度
  }
}

效果示例:点击“启动渐入渐出”按钮后,图片会自动在透明和不透明状态之间变化。

20241031_232852.gif


四、旋转与缩放组合动画

旋转和缩放组合动画适用于强调或引导用户注意力。以下代码展示自动旋转与缩放的组合动画。

4.1 自动旋转与缩放组合动画
@Entry
@Component
export struct RotateScaleAnimation {
   
  @State private rotation: number = 0; // 旋转角度
  @State private scale1: number = 1; // 缩放比例

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

      Button('启动旋转缩放') // 按钮触发组合动画
        .onClick(() => this.startRotateScaleAnimation())
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center);
  }

  // 自动执行旋转与缩放动画的函数
  startRotateScaleAnimation() {
   
    setInterval(() => {
   
      this.rotation += 45; // 每次增加45度旋转
      this.scale1 = this.scale1 === 1 ? 1.5 : 1; // 缩放比例在 1 和 1.5 之间切换
    }, 1200); // 每 1.2 秒切换一次
  }
}

效果示例:点击“启动旋转缩放”按钮后,图片会自动旋转 45 度并在两种缩放比例间切换。

20241031_233027.gif


五、综合应用:弹性缩放与透明度渐变

以下示例展示了弹性缩放与透明度渐变的组合动画,使界面效果更加丰富。

5.1 弹性缩放与渐变动画
@Entry
@Component
export struct ElasticScaleFadeAnimation {
   
  @State private scale1: number = 1; // 缩放比例
  @State private opacity1: number = 1; // 透明度

  build() {
   
    Column() {
   
      // 图片组件,应用弹性缩放和透明度渐变
      Image($r('app.media.cat'))
        .width(305)
        .height(360)
        .scale({
    x: this.scale1, y: this.scale1 }) // 应用缩放
        .opacity(this.opacity1) // 应用透明度
        .transition({
    opacity: 0.5 }) // 设置透明度过渡
        .margin(50)

      Button('启动弹性缩放与渐变') // 按钮触发组合动画
        .onClick(() => this.startElasticScaleFade())
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center);
  }

  // 自动执行弹性缩放与渐变的函数
  startElasticScaleFade() {
   
    let amplitude = 1.3;
    const interval = setInterval(() => {
   
      this.scale1 = amplitude; // 缩放弹性效果
      this.opacity1 = this.opacity1 === 1 ? 0.5 : 1; // 在两种透明度之间渐变
      amplitude = amplitude > 1 ? 1 : 1.3; // 缩放幅度的弹性切换

      // 若达到目标状态则清除动画
      if (Math.abs(amplitude - 1) < 0.1) {
   
        clearInterval(interval);
      }
    }, 1000);
  }
}

效果示例:点击“启动弹性缩放与渐变”按钮后,图片会进行弹性缩放,并在透明与不透明之间渐变显示。


小结

本篇介绍了鸿蒙 Animation 组件的高级动画控制,通过弹性效果、渐入渐出和旋转缩放的组合,帮助开发者创建更加生动的界面效果。掌握这些技巧后,可以根据需要灵活运用,设计出高品质的动画效果。


下一篇预告

在下一篇中,我们将深入介绍自定义动画路径,实现更复杂的动画运动方式。


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

下一篇: 「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现


作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=235
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


目录
相关文章
|
17天前
|
缓存 搜索推荐 索引
「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
在鸿蒙应用开发中,Image 组件用于加载和显示图片资源,并提供多种属性来控制图片的显示效果和适配方式。本篇将带你学习如何在鸿蒙应用中加载本地和远程图片、设置图片样式以及实现简单的图片轮播功能。
81 7
「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
|
3天前
|
前端开发 搜索推荐 开发者
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。
42 12
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
|
3天前
|
搜索推荐 前端开发 开发者
「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
自定义动画让开发者可以设计更加个性化和复杂的动画效果,适合表现独特的界面元素。鸿蒙提供了丰富的工具,支持通过自定义路径和时间控制来创建复杂的动画运动。本篇将带你学习如何通过自定义动画实现更多样化的效果。
52 11
「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
|
3天前
|
UED
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation 组件基础
在应用开发中,动画效果可以增强用户体验。鸿蒙框架提供了 translate、scale 和 rotate 等动画功能,允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。
46 10
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation 组件基础
|
1天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。
22 6
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
|
1天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。
17 5
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
|
4天前
「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件
Slider 和 Progress 是鸿蒙系统中的常用 UI 组件。Slider 控制数值输入,如音量调节;Progress 显示任务的完成状态,如下载进度。本文通过代码示例展示如何使用这些组件,并涵盖 进度条类型介绍、节流优化、状态同步 和 定时器动态更新。
59 7
「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件
|
4天前
|
UED 开发者
「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
在鸿蒙开发中,Toggle 和 Checkbox 是常用的交互组件,分别用于实现开关切换和多项选择。Toggle 提供多种类型以适应不同场景,而 Checkbox 支持自定义样式及事件回调。本篇将详细介绍这两个组件的基本用法,并通过实战展示它们的组合应用。
37 7
「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
|
19天前
|
自然语言处理 开发者
「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
本篇将详细介绍鸿蒙应用开发中的 Text 和 Button 组件。通过本篇内容,你将学习如何使用 Text 组件显示文本、格式化文本样式,以及如何使用 Button 组件处理点击事件并自定义样式。掌握这些基本组件的用法将为后续的 UI 开发奠定基础。
79 4
「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
|
20天前
|
开发工具 开发者 git
「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用
本篇将通过一个简单的计数器应用,带你体验鸿蒙开发环境的实际操作流程。本项目主要练习组件的使用、事件响应和状态管理,帮助开发者熟悉基本的应用构建流程。
65 3
「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用