鸿蒙开发之动画

本文介绍了鸿蒙开发中三种主要动画类型:属性动画、显示动画和转场动画,详细讲解了如何使用显式动画和属性动画进行布局更新,以及如何实现缩放、平移和翻转动画。还特别提到了rotate属性在翻转动画中的应用和属性动画的使用方法。
摘要由CSDN通过智能技术生成

一、概述

鸿蒙开发中动画按照基础能力分,可以分成三种:属性动画、显示动画、转场动画。

使用属性动画产生布局更新动画 显式动画(animateTo)和属性动画(animation)是ArkUI提供的最基础和常用的动画功能。在布局属性(如尺寸属性、位置属性)发生变化时,可以通过属性动画或显式动画,按照动画参数过渡到新的布局参数状态。

二、缩放动画

animateTo({
              duration:2000, //动画时长
              curve:Curve.Linear, //动画匀速
              iterations:3, //动画次数
              delay:1000, //延时时间执行
              playMode:PlayMode.Alternate, //来回交替
              onFinish: () => { //动画完成的回调
                this.message = '动画完成'
              }

            },() => {
              //想要执行的动画效果
              this.textWidth = 360;
              this.textHeight = 120
            })

我们使用了动画来设置Text的宽度和高度属性,就达到了这个效果。

三、平移动画

同理,我们可以通过设置Column的交叉轴的方向来达到平移动画。

  //定义一个变量来改变组件的排列方式
  @State alignParam: HorizontalAlign = HorizontalAlign.Start


 Column({space:20}) {
        Text(this.message)
          .width(this.textWidth)
          .height(this.textHeight)
          .backgroundColor(Color.Blue)
          .fontSize(20)
          .fontColor(Color.White)
          .fontWeight(FontWeight.Bold)
          .margin({top:30})
          .onClick(() => {

            animateTo({
              duration:2000, //动画时长
              curve:Curve.Linear, //动画匀速
              iterations:3, //动画次数
              delay:1000, //延时时间执行
              playMode:PlayMode.Alternate, //来回交替
              onFinish: () => { //动画完成的回调
                this.message = '动画完成'
              }

            },() => {
               //利用三目运算改变排列方式
              this.alignParam = this.alignParam === HorizontalAlign.End ? HorizontalAlign.Start : HorizontalAlign.End
            })
          })
      }
        //设置交叉轴上的排列方式
      .alignItems(this.alignParam)
      .width('100%')
      .height('100%')
  

四、翻转动画

旋转动画需要依赖组件的rotate属性,这个属性可以设置旋转的坐标系是x轴、y轴、z轴。并且需要一个必须参数angle角度。

//设置一个变量作为旋转角度
@State angle: number = 0

   Column({space:20}) {
        Text(this.message)
          .width(this.textWidth)
          .height(this.textHeight)
          .backgroundColor(Color.Blue)
          .fontSize(20)
          .fontColor(Color.White)
          .fontWeight(FontWeight.Bold)
          .margin({top:30})
          .rotate({ //旋转属性
            z:1,
            angle:this.angle
          })
          .onClick(() => {

            animateTo({
              duration:2000, //动画时长
              curve:Curve.Linear, //动画匀速
              iterations:3, //动画次数
              delay:1000, //延时时间执行
              playMode:PlayMode.Alternate, //来回交替
              onFinish: () => { //动画完成的回调
                this.message = '动画完成'
              }

            },() => {
              //设置旋转的角度是360度
              this.angle = 360
            })
          })
      }
      .alignItems(this.alignParam)
      .justifyContent(FlexAlign.Center)
      .width('100%')
      .height('100%')

五、属性动画

属性动画是不需要单独调用animateTo方法的,只需要在组件通过点语法调用animation属性。

  @State textWidth: number = 120
  @State textHeight: number = 40

     Column({space:20}) {
        Text(this.message)
          .width(this.textWidth)
          .height(this.textHeight)
          //直接调用属性即可,内部也可以传递动画的属性
          .animation({})
          .backgroundColor(Color.Blue)
          .fontSize(20)
          .fontColor(Color.White)
          .fontWeight(FontWeight.Bold)
          .margin({top:30})
          .onClick(() => {
              this.textWidth = 360;
              this.textHeight = 120
          })
      }
      .alignItems(this.alignParam)
      .justifyContent(FlexAlign.Center)
      .width('100%')
      .height('100%')

注意:animation()属性调用要在width、height之后,不然不会生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值