「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的间隔
  }
}
AI 代码解读

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

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 切换透明度
  }
}
AI 代码解读

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

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 秒切换一次
  }
}
AI 代码解读

效果示例:点击“启动旋转缩放”按钮后,图片会自动旋转 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);
  }
}
AI 代码解读

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


小结

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


下一篇预告

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


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

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


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


目录
打赏
0
11
12
1
151
分享
相关文章
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
135 92
|
3天前
HarmonyOS NEXT - ArkUI: Text组件
Text组件用于展示文本信息并支持子组件Span,可配置多种样式属性。包括设置文本颜色(.fontColor)、尺寸(.fontSize)、字体样式(.fontStyle)、粗细(.fontWeight)、主题(.fontFamily)等。此外,还支持文本对齐(.textAlign)、超长处理(.textOverflow与.maxLines配合)、装饰线(.decoration)等功能。示例代码展示了如何应用这些属性实现丰富的文本效果。
101 72
harmonyOS基础- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)
本文由黑臂麒麟(6年前端经验)撰写,介绍ArkTS开发中的常用基础组件与布局组件。基础组件包括Text、Image、Button等,支持样式设置如字体颜色、大小和加粗等,并可通过Resource资源引用统一管理样式。布局组件涵盖Column、Row、List、Grid和Tabs等,支持灵活的主轴与交叉轴对齐方式、分割线设置及滚动事件监听。同时,Tabs组件可实现自定义样式与页签切换功能。内容结合代码示例,适合初学者快速上手ArkTS开发。参考华为开发者联盟官网基础课程。
31 17
harmonyOS基础- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
25 11
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
HarmonyOS:ArkTS RowSplit 组件自学指南
在 ArkTS 开发中,复杂界面布局需求常见,尤其需要灵活调整子组件宽度时,传统方式难以满足动态交互需求。`RowSplit` 组件解决了这一问题,支持横向布局并插入可拖动的分割线,让用户轻松调整子组件宽度,提升体验。本文详细介绍了 `RowSplit` 的功能、接口、属性及使用示例,帮助开发者掌握其用法,并总结了注意事项。通过合理配置,可实现灵活美观的布局效果。希望对您有帮助,欢迎关注、点赞和收藏!
44 31
|
5天前
|
鸿蒙开发:信息标记组件
使用信息标记组件Badge,不需要我们在关注位置问题,我们通过position属性进行控制即可,而且针对信息的显示和隐藏,也不用过多的条件判断,可以说是非常的简单。
鸿蒙开发:信息标记组件
鸿蒙特效教程04-直播点赞动画效果实现教程
本教程适合HarmonyOS初学者,通过简单到复杂的步骤,通过HarmonyOS的Canvas组件,一步步实现时下流行的点赞动画效果。
72 1
|
2天前
|
HarmonyOS:ArkTS Path 组件自学指南
在鸿蒙应用开发中,绘制复杂图形常面临传统布局方式难以满足需求的问题。ArkTS 的 Path 组件提供了解决方案,如同一把“神奇画笔”,支持通过灵活的命令和属性绘制直线、曲线、椭圆弧等多样图形。本文详细介绍了 Path 组件从 API Version 7 起的功能特性,包括 `commands`、`fill`、`stroke` 等核心属性,以及各类绘图命令如 `M`(移动)、`L`(直线)、`C`(贝塞尔曲线)等。结合示例代码,展示了如何绘制简单直线到复杂曲线图形,并拓展了颜色、透明度和线条样式的自定义方法。掌握 Path 组件,可为应用带来更丰富生动的视觉体验,助力开发者实现创意绘图需求。
34 21
|
2天前
|
HarmonyOS NEXT - ArkUI: Button组件
Button是用于响应用户点击操作的按钮组件,支持胶囊型、圆形和普通三种样式。可通过`type`属性设置样式(默认为胶囊型),并使用`stateEffect`控制按压态效果(默认开启)。Button可包含子组件,实现复杂功能按钮;支持自定义文本样式、背景色及边框弧度等样式。示例代码展示了不同类型按钮的创建、子组件嵌套及点击事件处理方法。
51 18
HarmonyOS NEXT - ArkUI: TextInput组件
TextInput组件是用于输入单行文本的核心组件,广泛应用于登录账号、密码输入及消息发送等场景。支持通过`placeholder`设置提示文字、`text`初始化文本内容以及`controller`控制输入行为。提供多种输入类型(如普通、密码、邮箱、数字)通过`.type()`方法设置,并可通过`.onChange()`监听文本变化。 示例代码展示了基本用法,包括账号、密码和手机号的输入框实现。此外,组件支持字符计数功能,通过`.maxLength()`限制最大字符数、`.showCounter()`显示计数器,并可自定义阈值和高亮边框效果,满足复杂输入场景需求。
51 15

物联网

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等