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

鸿蒙进阶篇-属性动画

“在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。”

各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙进阶篇-属性动画

在鸿蒙中,属性动画(Property Animation)是一种用于实现视图或组件属性平滑过渡和动态变化的机制。

通过属性动画,可以对对象的属性(如位置、大小、透明度、颜色等)进行连续、流畅的改变,从而产生生动的动画效果。

与传统的补间动画(Tween Animation)不同,属性动画直接操作对象的实际属性值,而不仅仅是视图的显示效果。这使得动画更加真实和灵活,能够与应用的逻辑和交互更好地结合。

属性动画可以设置动画的持续时间、插值器(控制动画的变化速率)、重复次数等参数,以满足不同的动画需求。

属性值的变化,通常会引发 UI 的变化,结合动画可以让这个变化过程【更为流畅】,反之这个过程将在一瞬间完成,用户体验不好,观感突兀。这就是动画的作用:附上官方文档链接icon-default.png?t=O83Ahttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-animation-V5

HarmonyOS 中的动画主要分为:

  1. 属性动画
  2. 转场动画
  3. 组件动画

属性动画-animation

接下来看看如何让咱们的应用动起来

组件的某些通用属性变化时,可以通过属性动画实现渐变过渡效果,提升用户体验。支持的属性包括width、height、backgroundColor、opacity、scale、rotate、translate等。

基本使用

使用动画的核心步骤如下:

  1. 声明相关状态变量
  2. 将状态变量设置到相关可动画属性方法上
  3. 通过属性动画接口开启属性动画(在属性动画上面的属性会应用动画)
// 最核心写法,相关动画属性后续展开
组件
  .属性1()
  .属性2()
  // .... animation 必须在需要动画的属性的后面 
  .animation({})

下面展示一个案例来理解:

@Entry
@Component
struct Page01_animation {
  // 1. 声明相关状态变量
  @State translateY: number = 1
  @State bgColor: ResourceColor = Color.Pink
  @State fontColor: ResourceColor = '#0094ff'
  @State fontWeight: number = 100

  build() {
    Column() {
      Text('C')
        .width(100)
        .height(100)
        .opacity(1)// 2.将状态变量设置到相关可动画属性接口
        .fontWeight(this.fontWeight)
        .backgroundColor(this.bgColor)
        .textAlign(TextAlign.Center)
        .translate({ y: this.translateY })// 3.通过属性动画接口开启属性动画
        .animation({})
      Button('修改状态变量')
        .onClick(() => {
          // 4. 通过状态变量改变UI界面
          this.bgColor = '#0094ff'
          this.translateY = 100
          this.fontColor = Color.Pink
          this.fontWeight = 900
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.SpaceAround)
  }
}

常用属性

可以通过动画参数(以对象的形式传递)来定制动画效果

组件
  .animation({ 动画参数 })

组件
  .animation({ 动画参数 })

名称

参数类型

必填

描述

duration

number

动画时长,单位为毫秒。

默认值:1000

curve

string | Curve

| ICurve

设置动画曲线。

默认值:Curve.EaseInOut

delay

number

动画延迟播放时间。单位为毫秒,默认不延时播放。

默认值:0

取值范围:(-∞, +∞)

iterations

number

动画播放次数。

默认值:1

取值范围:[-1, +∞)

说明:

设置为-1时表示无限次播放。设置为0时表示无动画效果。

playMode

PlayMode

动画播放模式,默认播放完成后重头开始播放。

默认值:PlayMode.Normal

onFinish

() => void

结束回调,动画播放完成时触发。

从API version 9开始,该接口支持在ArkTS卡片中使用。

动画曲线icon-default.png?t=O83Ahttps://animista.net/枚举值:

名称

描述

Linear

表示动画从头到尾的速度都是相同的。

Ease

表示动画以低速开始,然后加快,在结束前变慢,CubicBezier(0.25, 0.1, 0.25, 1.0)。

EaseIn

表示动画以低速开始,CubicBezier(0.42, 0.0, 1.0, 1.0)。

EaseOut

表示动画以低速结束,CubicBezier(0.0, 0.0, 0.58, 1.0)。

EaseInOut

表示动画以低速开始和结束,CubicBezier(0.42, 0.0, 0.58, 1.0)。

FastOutSlowIn

标准曲线,CubicBezier(0.4, 0.0, 0.2, 1.0)。

LinearOutSlowIn

减速曲线,CubicBezier(0.0, 0.0, 0.2, 1.0)。

FastOutLinearIn

加速曲线,CubicBezier(0.4, 0.0, 1.0, 1.0)。

ExtremeDeceleration

急缓曲线,CubicBezier(0.0, 0.0, 0.0, 1.0)。

Sharp

锐利曲线,CubicBezier(0.33, 0.0, 0.67, 1.0)。

Rhythm

节奏曲线,CubicBezier(0.7, 0.0, 0.2, 1.0)。

Smooth

平滑曲线,CubicBezier(0.4, 0.0, 0.4, 1.0)。

Friction

阻尼曲线,CubicBezier(0.2, 0.0, 0.2, 1.0)。

playMode 播放模式枚举值

名称

描述

Normal

动画正向播放。

Reverse

动画反向播放。

Alternate

先正向播放,再反向播放。

AlternateReverse

先反向播放,后正向播放。

下面展示一个案例来理解:

@Entry
@Component
struct Page02_animationDemo1 {
  // 1. 声明相关状态变量
  @State scaleX: number = 1
  @State scaleY: number = 1

  build() {
    Column({ space: 50 }) {
      Text('全场低至一分购')
        .fontSize(30)
        .fontWeight(900)
        .fontColor(Color.Red)
        .backgroundColor('#e8b66d')
        .padding(10)
        .borderRadius(20)// 2.将状态变量设置到相关可动画属性接口
        .scale({
          x: this.scaleX,
          y: this.scaleY
        })// 3. 通过属性动画接口开启属性动画
        .animation({
          duration: 1000,
          curve: Curve.Ease,
          playMode: PlayMode.Alternate,
          iterations: -1
        })
        .onClick(() => {
          // 4.通过状态变量改变UI界面
          this.scaleX = 1.3
          this.scaleY = 1.3
        })
    }
    .width('100%')
    .height('100%')
    .padding(20)

  }

  @Styles
  fullSize() {
    .width('100%')
    .height('100%')
  }
}

组件加载自动触发事件

如果要实现元素加载的时候就开始动画,可以使用挂载事件来实现,这是一个通用事件

附上官方文档链接icon-default.png?t=O83Ahttps://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-events-show-hide-V5

名称

功能描述

onAppear(event: () => void)

组件挂载显示时触发此回调。

从API version 9开始,该接口支持在ArkTS卡片中使用。

onDisAppear(event: () => void)

组件卸载消失时触发此回调。

从API version 9开始,该接口支持在ArkTS卡片中使用。

下面展示一个案例来理解:

@Entry
@Component
struct Page03_appearAnddisAppear {
  @State isShow: boolean = false

  build() {
    Column({ space: 50 }) {
      Button('切换显示')
        .onClick(() => {
          this.isShow = !this.isShow
        })

      if (this.isShow) {
        Text('我是文本')
          .width('100%')
          .onAppear(() => {
            console.log('加载了')
          })
          .onDisAppear(() => {
            console.log('卸载了')
          })
      }

    }
    .width('100%')
    .height('100%')
    .padding(20)
  }
}

以上是关于鸿蒙进阶篇-属性动画综合的一些内容,方便大家学习,至此,关于鸿蒙进阶篇-Scroll、Tabs、Badge属性动画 综合的内容就介绍到这里,愿您能学以致用,开发出精彩的鸿蒙应用!

以上内容仅供学习交流,如有违法或者侵权可以联系删除。


http://www.kler.cn/a/385348.html

相关文章:

  • C++:map 和 set 的使用
  • ReactPress:深入解析技术方案设计与源码
  • LangChain实际应用
  • 深度学习:自注意力机制(Self-attention)详解
  • Jmeter5.X性能测试
  • 宏集Cogent DataHub: 高效实现风电场数据集中管理与自动化
  • 什么是 OpenTelemetry?
  • 苹果发布iOS 18.2首个公测版:Siri接入ChatGPT、iPhone 16拍照按钮有用了
  • 回调数据丢了?
  • 从0开始学习机器学习--Day19--学习曲线
  • 让Apache正确处理不同编码的文件避免中文乱码
  • Redis 热key总结
  • 各种数据库介绍
  • LeetCode 热题100 之 栈
  • C# 编程语言:跨时代的革命
  • 显存占用 显存测试
  • 《现代网络技术》读书笔记:SDN数据平面和OpenFlow
  • O-RAN 前传传输同步配置
  • kafka版本
  • java中图片加载
  • While 循环与 break 语句
  • 【数据集】【YOLO】【目标检测】口罩佩戴识别数据集 1971 张,YOLO佩戴口罩检测算法实战训练教程!
  • Autosar NvM规范导读工作原理与实现代码剖析
  • 关于Websocket
  • 文件IO拷贝应用
  • Matlab车牌识别课程设计报告(附源代码)