【HarmonyOS学习】动画
创始人
2024-12-26 12:34:10
0

页面分类动画

在这里插入图片描述

显示动画

function animateTo(value: AnimateParam, event: () => void): void; 

代码如下:(实现属性变化引发的动画)

@Entry @Component struct Animate_Page1 {   @State boxWidth: number = 100;   @State boxHeight: number = 100;   @State flag: boolean = true;    build() {     Stack({ alignContent: Alignment.BottomEnd }) {       Column() {         Row() {          }         .width(this.boxWidth)         .height(this.boxHeight)         .backgroundColor(Color.Red)       }       .height('100%')       .width('100%')       .justifyContent(FlexAlign.Center)        Button("动画")         .width(50)         .height(50)         .margin(20)         .onClick(() => {           animateTo({             duration: 1000 //动画时间           }, () => {             if (this.flag) {               this.boxWidth = 240;               this.boxHeight = 240;             } else {               this.boxWidth = 100;               this.boxHeight = 100;             }             this.flag = !this.flag;           })         })     }     .width('100%')   } } 

常见属性

  • duration:动画执行时间

  • iterations:动画播放次数,-1表示无限次播放

  • curve:播放曲线

  • playMode:动画播放模式

  • delay:动画延迟播放时间

属性动画

使用animation属性去定义动画的属性,需要注意的点是,如果在animation方法后定义的属性,在改变时将不会触发动画。

@Entry @Component struct Animate_Page2 {   @State boxWidth: number = 100;   @State boxHeight: number = 100;   @State flag: boolean = true;    build() {     Stack({ alignContent: Alignment.BottomEnd }) {       Column() {         Row() {          }         .width(this.boxWidth)         .height(this.boxHeight)         .backgroundColor(Color.Red)         .animation({           duration: 1000         })       }       .height('100%')       .width('100%')       .justifyContent(FlexAlign.Center)        Button("动画")         .width(50)         .height(50)         .margin(20)         .onClick(() => {           if (this.flag) {             this.boxWidth = 240;             this.boxHeight = 240;           } else {             this.boxWidth = 100;             this.boxHeight = 100;           }           this.flag = !this.flag;         })     }     .width('100%')   } } 

常见属性

  • duration:动画执行时间

  • iterations:动画播放次数,-1表示无限次播放

  • curve:播放曲线

  • playMode:动画播放模式

  • delay:动画延迟播放时间

弹簧曲线动画(springCurve属性)

实现组件的左右抖动

import curves from '@ohos.curves';  @Entry @Component struct Animate_Page3 {   @State message: string = '登录框';   @State translateX: number = 0;   @State translateY: number = 0;    jumpWithSpeed(velocity: number) {     this.translateX = -10;     animateTo({       duration: 2000,       //速度(velocity)质量(mass)刚度(stiffness)阻尼(damping)       curve: curves.springCurve(velocity, 1, 1, 1)     }, () => {       this.translateX = 0;     })   }    build() {     Column() {       Row() {         Text(this.message).fontSize(40).width('100%').textAlign(TextAlign.Center)       }       .width(200)       .height(200)       .backgroundColor(Color.Gray)       .margin({         top: 20,         bottom: 50       })       .translate({         x: this.translateX,         y: this.translateY       })        Row() {         Button("jump10").width(100).onClick(() => {           this.jumpWithSpeed(10)         })         Button("jump200").width(100)           .onClick(() => {             this.jumpWithSpeed(200)           })       }.justifyContent(FlexAlign.SpaceAround)       .width('100%')     }     .height('100%')     .width('100%')   } } 

路径动画(motionPath属性)

需要在改变的外层轮廓添加animation属性,才能实现。需要注意点坐标需要乘2.

@Entry @Component struct Animate_Page4 {   @State message: string = 'Hello World';   @State flag: boolean = true;    build() {     Column() {       Row() {         Text(this.message).fontSize(20).width('100%').textAlign(TextAlign.Center)       }       .width(100)       .height(100)       .backgroundColor(Color.Gray)       .margin(10)       .onClick(() => {         this.flag = !this.flag;       })       .motionPath({         path: "M start.x start.y L10 400 L400 400 Lend.x end.y",         from: 0,         to: 1,         rotatable: false//控制组件是否沿运动方向旋转       })     }     .height('100%')     .width('100%')     .alignItems(this.flag ? HorizontalAlign.Start : HorizontalAlign.End)     .animation({       duration: 2000     })   } } 

页面间动画-放大缩小视图

关键属性:sharedTransition属性

sharedTransition属性中的type类型包含Exchange和Static两种,详细简介如下图:
在这里插入图片描述
实现两个页面之间的图片放大缩小的方式跳转

Animate_Page5:

import router from '@ohos.router';  @Entry @Component struct Animate_Page5 {   @State message: string = 'Hello World';    build() {     Column() {       Image($r('app.media.app_icon'))         .width(50)         .height(50)         .margin({           top: 30,           bottom: 30         })         .sharedTransition("icon1", {           duration: 1000,           type: SharedTransitionEffectType.Exchange         })        Button("点我跳转")         .width(200)         .fontSize(20)         .fontColor(Color.White)         .onClick((event: ClickEvent) => {           router.pushUrl({             url: "pages/Animate_Page5_Image"           })         })     }     .height('100%')     .width('100%')   } } 

Animate_Page5_Image:

import router from '@ohos.router';  @Entry @Component struct Animate_Page5_Image {   @State message: string = 'Hello World';    build() {     Column() {       Image($r('app.media.app_icon'))         .width(50)         .height(50)         .onClick(() => {           router.back();         })         .sharedTransition("icon1")     }     .height('100%')     .width('100%')     .justifyContent(FlexAlign.Center)   } } 

在这里插入图片描述

页面转场动画

可以设置转场动画方向和透明度等属性

pageTransition() {     //页面打开时候的动画   PageTransitionEnter({})     .onEnter((type: RouteType, progress: number) => {      })     //页面离开时候的动画   PageTransitionExit({})     .onExit((type: RouteType, progress: number) => {      }) } 

相关内容

热门资讯

科技新动态!开心跑得快有辅助工... 科技新动态!开心跑得快有辅助工具吗(透明挂)外挂透明挂辅助神器(2021已更新)(哔哩哔哩)1)开心...
4分钟实锤!吉祥麻将,微扑克切... 4分钟实锤!吉祥麻将,微扑克切实是真的有挂,介绍教程(有挂揭秘);一、吉祥麻将AI软件牌型概率发牌机...
实测发现!鄂州晃晃外 挂(透视... 实测发现!鄂州晃晃外 挂(透视)透视辅助工具(2021已更新)(哔哩哔哩)1、鄂州晃晃外 挂系统规律...
三分钟了解!好彩麻将怎样才可以... 三分钟了解!好彩麻将怎样才可以拿好牌(透视辅助)外挂透明挂辅助机制(2020已更新)(哔哩哔哩)1、...
九分钟辅助!斗棋辅助器在哪,w... 九分钟辅助!斗棋辅助器在哪,wepoker本来真的是有挂,教你攻略(有挂教程)1、下载好斗棋辅助器在...
记者揭秘!!广东雀神麻雀辅助器... 记者揭秘!!广东雀神麻雀辅助器在哪里下载(透视)透视辅助app(2020已更新)(哔哩哔哩)1、很好...
终于清楚!皮皮跑胡子输赢规律(... 终于清楚!皮皮跑胡子输赢规律(辅助挂)外挂透明挂辅助机制(2026已更新)(哔哩哔哩)1)皮皮跑胡子...
二分钟科普!花城牌舍系统规律,... 二分钟科普!花城牌舍系统规律,aAPOKER竟然存在有挂,揭秘教程(有挂插件)进入游戏-大厅左侧-新...
一分钟教你!心悦手机麻将辅牌器... 一分钟教你!心悦手机麻将辅牌器(透视辅助)外挂透视辅助挂(2024已更新)(哔哩哔哩)1、每一步都需...
科技新动态!四方河南麻将赢牌技... 科技新动态!四方河南麻将赢牌技巧(透视)外挂透明挂辅助神器(2026已更新)(哔哩哔哩)1、每一步都...