鸿蒙开发:了解显式动画animateTo

简介: 在实际的开发中,应该遵循规范,正确的使用属性动画animateTo,切莫在轮询中使用,否则就会造成本不属当前的动画进行执行,造成UI错误,还有一点需要注意,那就是直接使用animateTo可能导致实例不明确的问题,建议使用getUIContext获取UIContext实例,并使用animateTo调用绑定实例的animateTo。

前言

运行环境:基于HarmonyOs NEXT

DevEco Studio:Build Version: 5.0.3.900

API:12

modelVersion5.0.0


上篇文章,我们简单了解了属性动画,知道了属性动画有两种实现方式,一种是animation,另一种是animateTo,上篇的案例基本上也都是使用animation来实现的,其实在案例中,大家也都发现了,animation是组件的通用属性,也就是说是和组件进行绑定的,如果想让多个组件进行动画播放,那么就需要绑定多个组件。有没有一种方式,执行起来,可以适用于多个可动画属性配置相同动画参数的动画呢,答案是必须有的,这就是animateTo。


举一个很简单的案例,让两个组件,同时在X轴方向,平移100,用时1秒。


@Entry
@Component
struct Index {
  @State translateX: number = 0
  build() {
    RelativeContainer() {
      Text("1")
        .width(50)
        .height(50)
        .textAlign(TextAlign.Center)
        .backgroundColor(Color.Red)
        .translate({ x: this.translateX })
        .margin({ top: 100 })
        .id("view1")
        .alignRules({
          top: { anchor: "__container__", align: VerticalAlign.Top },
          middle: { anchor: "__container__", align: HorizontalAlign.Center }
        })
      Text("2")
        .width(50)
        .height(50)
        .textAlign(TextAlign.Center)
        .backgroundColor(Color.Red)
        .translate({ x: this.translateX })
        .margin({ top: 100 })
        .alignRules({
          top: { anchor: "view1", align: VerticalAlign.Top },
          middle: { anchor: "__container__", align: HorizontalAlign.Center }
        })
      Button("点击")
        .margin({ top: 10 })
        .onClick(() => {
          animateTo({ duration: 1000 }, () => {
            this.translateX = 100
          })
        })
        .alignRules({
          center: { anchor: "__container__", align: VerticalAlign.Center },
          middle: { anchor: "__container__", align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}


动画效果:




从上边的案例中我们可以看到,animateTo是一个全局实现属性动画的方式,它可以应用于多个组件之间,但是呢使用它,有两个需要注意的点,那就是不推荐在aboutToAppear、aboutToDisappear中调用动画;在aboutToAppear中,是因为自定义组件内的build还未执行,内部组件还未创建,动画时机过早,动画属性没有初值无法对组件产生动画;aboutToDisappear原因是,组件即将销毁,不能在aboutToDisappear里面做动画。



相关参数


通过源码,我们看到有两个参数,第一个参数是AnimateParam,用于控制动画执行的相关属性,比如延时,时间,速度等等,第二个参数是一个闭包回调函数,用于改变动画属性。


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


AnimateParam参数


名称

类型

是否必填

描述

duration

number

动画持续时间,单位为毫秒。默认值:1000

tempo

number

动画播放速度,值越大动画播放越快,值越小播放越慢,为0时无动画效果。默认值:1.0

curve

Curve| ICurve9+|string

动画曲线。默认值:Curve.EaseInOut

delay

number

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

默认值:0

iterations

number

动画播放次数。默认播放一次,设置为-1时表示无限次播放。设置为0时表示无动画效果。默认值:1

playMode

PlayMode

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

默认值:PlayMode.Normal

onFinish

() => void

动画播放完成回调。

finishCallbackType11+

FinishCallbackType

在动画中定义onFinish回调的类型。

默认值:FinishCallbackType.REMOVED

expectedFrameRateRange11+

ExpectedFrameRateRange

设置动画的期望帧率。


以上的每个参数,都可能在特定的情况下进行运用。


duration参数,不多说了,就是执行动画的总体时间,这个也是实际属性动画中最常见的一个属性;像tempo,delay,iterations,playMode,onFinish都是毕竟常见而且简单的属性,就不过多赘述了,我们重点概述下剩下的几个参数。


curve,动画执行的曲线,走的是贝塞尔曲线形式,可设置的类型比较多,默认值是Curve.EaseInOut,也就是动画以低速开始和结束,除此之外,还有Linear,表示动画从头到尾的速度都是相同的;Ease:表示动画以低速开始,然后加快,在结束前变慢;EaseIn:表示动画以低速开始;EaseOut:表示动画以低速结束;FastOutSlowIn:标准曲线,LinearOutSlowIn:减速曲线;FastOutLinearIn:加速曲线;ExtremeDeceleration:急缓曲线;Sharp:锐利曲线;Rhythm:节奏曲线;Smooth:平滑曲线;Friction:阻尼曲线。


playMode,可以设置动画播放模式,目前提供的有四种播放模式,默认是Normal也就是正向播放,Reverse是反向播放,Alternate毕竟好玩,可以让动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放;AlternateReverse是和Alternate相反的,动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放。


在Api11之后的版本,又增加了两个属性,分别是finishCallbackType和expectedFrameRateRange,前者可以定义动画结束时回调的类型,后者可以设置动画执行的帧率,帧率包括,最大,最小和最优,可以根据需求进行设置。



相关总结


在实际的开发中,应该遵循规范,正确的使用属性动画animateTo,切莫在轮询中使用,否则就会造成本不属当前的动画进行执行,造成UI错误,还有一点需要注意,那就是直接使用animateTo可能导致实例不明确的问题,建议使用getUIContext获取UIContext实例,并使用animateTo调用绑定实例的animateTo。

目录
打赏
0
3
3
0
164
分享
相关文章
|
3天前
鸿蒙开发:V2版本装饰器@Once
@Once装饰器只能与@Param搭配使用,仅此一个组合,无其他使用方式,还有就是,必须在V2版本,也就是@ComponentV2装饰的自定义组件中,否则会报异常。
鸿蒙开发:V2版本装饰器@Once
|
1天前
|
鸿蒙开发:实现AOP代码插桩能力
正确的运用AOP,可以提升代码的模块化、复用性、可维护性和灵活性,同时降低了耦合度,使系统更易于扩展和维护。
24 13
鸿蒙开发:实现AOP代码插桩能力
|
4天前
鸿蒙开发:熟知@BuilderParam装饰器
在实际的开发中,我们经常会遇到自定义组件的情况,比如通用的列表组件,选项卡组件等等,由于使用方的样式不一,子组件是动态变化的,针对这一情况,就不得不让使用方把子组件视图传递过来,如何来接收这个UI视图,这就是@BuilderParam装饰器的作用。
鸿蒙开发:熟知@BuilderParam装饰器
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
60 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
3天前
|
鸿蒙开发:校验构造传参装饰器@Require
@Require装饰器依赖ArkTs的类型检查,仅在编译阶段拦截类型错误和缺失参数,对于运行时才能确定的动态值,如从网络请求获取的数据,仍需在生命周期函数中进行二次校验。
36 18
鸿蒙开发:V2版本装饰器之@Monitor装饰器
如果要实现@Monitor监听,其变量一定要被@Local、@Param、@Provider、@Consumer、@Computed装饰,未被修饰则无法被监听,还有,如果监听对象的变化,则不建议在一个类中对同一个属性进行多次@Monitor的监听,多次监听,只有最后一个定义的监听方法才会有效。
HarmonyOS NEXT开发-ArkUI六
本文介绍了颜色渐变(线性渐变和径向渐变)与阴影效果的应用,通过具体代码示例展示了如何在组件中实现这些视觉效果,帮助开发者提升界面美观度。君志所向,一往无前,欢迎一起探索! 简介字数:239
16 0
HarmonyOS NEXT开发-ArkUI六
HarmonyOS NEXT开发-ArkUI八
本文介绍了Harmony OS开发中的线性布局技巧,包括交叉轴对齐、自适应缩放及综合实践案例,帮助开发者轻松掌握相关技能。每天学习一个知识点,一起加油!
16 0
HarmonyOS NEXT开发-ArkUI八
Harmony os next~UI开发与ArkUI框架
鸿蒙OS的UI开发基于ArkUI框架,采用声明式编程,简化开发流程。五大核心组件(Text、Button、List、Grid、Flex)助力高效布局,支持数据绑定与动态更新。事件响应机制灵敏,适合构建交互丰富的应用。实战技巧包括规范命名、样式复用和调试方法。掌握这些,轻松开发鸿蒙应用。下期预告:分布式开发,记得带上烤冷面!
20 0
Harmony os next~HarmonyOS Ability与页面跳转开发详解
HarmonyOS采用分布式架构,其Ability体系包括Page、Service、Data和Form四大类型Ability。Page Ability支持多页面跳转与数据传递,Service Ability用于后台任务,Data Ability提供数据共享接口,Form Ability实现轻量化卡片服务。本文详细解析了各Ability的开发方法、生命周期管理、跨Ability通信及最佳实践,帮助开发者掌握HarmonyOS应用开发的核心技能。
45 0

热门文章

最新文章

  • 1
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
    16
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    17
  • 3
    EMAS 性能分析全面适配HarmonyOS NEXT,开启原生应用性能优化新纪元
    10
  • 4
    鸿蒙开发:了解@Builder装饰器
    7
  • 5
    【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    16
  • 6
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
    10
  • 7
    Harmony os next~HarmonyOS Ability与页面跳转开发详解
    45
  • 8
    HarmonyOS使用系统图标
    6
  • 9
    鸿蒙H5离线包技术分享
    24
  • 10
    【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    15
  • AI助理

    你好,我是AI助理

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