ArkUI中的显式动画

举报
坚果的博客 发表于 2022/07/27 08:34:23 2022/07/27
【摘要】 在任何系统的UI框架中,动画实现的原理都是相同的,即:在一段时间内,快速地多次改变UI外观;由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画,这和电影的原理是一样的。换言之,动画是“画出来的动”,关键不在于“画”的来源,而在于“动”的来源,如果这种动是记录了现实中发生过的运动,那它就是电影,如果这种动在现实中不曾存在,那它就是动画。这一节带大家来了解动画相关的内容显式动画显式动画...

在任何系统的UI框架中,动画实现的原理都是相同的,即:在一段时间内,快速地多次改变UI外观;由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画,这和电影的原理是一样的。换言之,动画是“画出来的动”,关键不在于“画”的来源,而在于“动”的来源,如果这种动是记录了现实中发生过的运动,那它就是电影,如果这种动在现实中不曾存在,那它就是动画。

这一节带大家来了解动画相关的内容

  • 显式动画


显式动画

显示动画由全局方法 animateTo 实现,我们来看一下他的数学

  • value:设置动画的具体配置参数,AnimateParam 说明如下:

    • duration:设置动画的执行时长,单位为毫秒,默认为 1000 毫秒。

    • tempo:设置动画的播放速度,值越大动画播放越快,值越小播放越慢,默认值为 1 ,为 0 时无动画效果。

    • curve:设置动画曲线,默认值为 Linear

    • delay:设置动画的延迟执行时间,单位为毫秒,默认值为 0 不延迟。

    • iterations:设置动画的执行次数,默认值为 1 次,设置为 -1 时无限循环。

    • playMode:设置动画播放模式,默认播放完成后重头开始播放。

    • onFinish:动画播放完成的回调。

  • event:指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。



下面是演示

gif8

源代码如下:

import router from '@system.router'
​
@Entry
@Component
struct Index {
  @State message: string = 'OpenHarmony之旅'
  @State btnWidth: number = 330;
  @State btnHeight: number = 80;
  @State btnAnim: boolean = true;
​
  build() {
    Row() {
      Column() {
​
        Button(this.message)
          .size({ width: this.btnWidth, height: this.btnHeight })
          .fontSize(20)
          .backgroundColor(Color.Orange)
          .fontStyle(FontStyle.Italic)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            if (this.btnAnim) {
              animateTo({
​
                onFinish: () => {
                  console.log("动画已完成")
​
                }
              }, () => {
                this.btnWidth = 159;
                this.btnHeight = 50;
              });
            } else {
              animateTo({
​
                onFinish: () => {
​
                }
              }, () => {
                this.btnWidth = 200;
                this.btnHeight = 60;
              });
            }
            this.btnAnim = !this.btnAnim;
          })
​
​
      }
      .width('100%')
​
    }
    .height('100%')
  }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。