【HarmonyOS】ArkUI - 动画

利用属性动画显示动画组件转场动画实现组件动画效果。

一、属性动画

属性动画是通过设置组件的 animation 属性来给组件添加动画,当组件的 width、height、Opacity、backgroundColor、scale、rotate、translate 等属性变更时,可以实现渐变过渡效果。

以 Image 组件为例,给它添加动画,其实就是给它添加 animation 的属性:

Image($r('app.media.app_icon'))
  .position({
    x: 10, // x轴坐标
    y: 10  // y轴坐标
  })
  .rotate({
    angle: 0,       // 旋转角度
    centerX: '50%', // 旋转中心横坐标
    centerY: '50%'  // 旋转中心纵坐标
  })
  .animation({
    duration: 1000,
    curve: Curve.EaseInOut
  })

这时,ArkUI 就能帮我们监控组件的样式变化,我们只需要在与用户互动的事件当中去修改组件的样式,ArkUI 一旦发现组件的样式变化,就会自动填充起始样式和结束样式之间的每一帧画面,从而实现样式变化的渐变过渡效果。所以,一个动画就出来了。

注意:

  1. animation 属性一定要放在需要有动画属性的样式之后。就像上面的实例代码,animation 要放在 position 和 rotate 之后。如果把 animation 放在前面,然后再写 position 和 rotate,那么这俩就不会有任何的变化。

  2. animation 属性不是对所有样式都有效。

animation 可以传递的动画参数:

名称参数类型必填描述
durationnumber设置动画时长。
默认值:1000,单位:毫秒
temponumber动画播放速度。数值越大,速度越快。
默认值:1
curveCurve设置动画曲线。
默认值:Curve.EaseInOut,平滑开始和结束。
delaynumber设置动画延迟执行的时长。
默认值:0,单位:毫秒
iterationsnumber设置播放次数。
默认值:1,取值范围:[-1, +∞)
说明:设置为 -1 时表示无限次播放。
playModePlayMode设置动画播放模式,默认播放完成后重头开始播放。
默认值:PlayMode.Normal
onFinish()=> void状态回调,动画播放完成时触发。

示例代码:

@Entry
@Component
struct Index {
  @State textX: number = 10
  @State textY: number = 10

  build() {
    Column() {
      Image($r('app.media.app_icon'))
        .position({
          x: this.textX,
          y: this.textY
        })
        .rotate({
          angle: 0,
          centerX: '50%',
          centerY: '50%'
        })
        .width(40)
        .height(40)
        .animation({
          duration: 500
        })

      Button('按钮')
        .position({
          x: 10,
          y: 100
        })
        .onClick(() => {
          this.textX += 20
        })
    }
  }
}

运行效果:
请添加图片描述

二、显示动画

显示动画是通过全局 animationTo 函数来修改组件属性,实现属性变化时的渐变过渡效果。

显示调用 animationTo 函数触发动画:

animateTo(
  { duration: 1000 }, // 动画参数
  () => {
    // 修改组件属性关联的状态变量
  })

示例代码:

@Entry
@Component
struct Index {
  @State textX: number = 10
  @State textY: number = 10

  build() {
    Column() {
      Image($r('app.media.app_icon'))
        .position({
          x: this.textX,
          y: this.textY
        })
        .rotate({
          angle: 0,
          centerX: '50%',
          centerY: '50%'
        })
        .width(40)
        .height(40)

      Button('按钮')
        .position({
          x: 10,
          y: 100
        })
        .onClick(() => {
          animateTo(
            { duration: 500 },
            () => {
              this.textX += 20
            }
          )
        })
    }
  }
}

三、组件转场动画

组件转场动画是在组件插入或移除时的过渡动画,通过组件的 transition 属性来配置。组件插入可以理解为组件从无到有,也就是一个入场的过程;组件移除可以理解为组件从有到无,也就是一个退场的过程。

语法:

Image($r('app.media.app_icon'))
  .transition({
    opacity: 0,
    rotate: { angle: -360 },
    scale: { x: 0, y: 0 }
  })

动画参数:

参数名称参数类型必填参数描述
typeTransistionType类型,默认包含组件新增和删除。
默认是 ALL
opacitynumber不透明度,为插入时起点和删除时终点的值。
默认值:1,取值范围:[0, 1]
translate{
  x?: number或string,
  y?: number或string,
  z?: number或string
}
平移效果,为插入时起点和删除时终点的值。
-x: 横向的平移距离。
-y: 纵向的平移距离。
-z: 竖向的平移距离。
scale{
  x?: number,
  y?: number,
   z?: number,
  centerX?: number或string,
  centerY?: number或string
}
缩放效果,为插入时起点和删除时终点的值。
-x: 横向放大倍数(或缩小比例)。
-y: 纵向放大倍数(或缩小比例)。
-z: 当前为二维显示,该参数无效。
-centerX、centerY 指缩放中心点,centerX和centerY默认值是"50%"。
-中心点为0时,默认的是组件的左上角。
rotate{
  x?: number,
  y?: number,
  z?: number,
  angle: number或string,
  centerX?: number或string,
  centerY?: number或string
}
旋转效果:
angle 是旋转角度,其它参数与 scale 类似。

注意:transition 要结合 animateTo 去使用。

示例代码:

@Entry
@Component
struct Index {
  @State isBegin: boolean = false

  build() {
    Column() {
      if (this.isBegin) {
        Image($r('app.media.app_icon'))
          .position({
            x: 10,
            y: 10
          })
          .width(100)
          .height(100)
          .transition({
            type: TransitionType.Insert,
            opacity: 0,
            translate: { x: -100 }
          })
      }

      Button('按钮')
        .position({
          x: 10,
          y: 200
        })
        .onClick(() => {
          animateTo(
            { duration: 1000 },
            () => {
              this.isBegin = true
            })
        })
    }
  }
}

运行效果:
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/517510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模块化编程:AMD 和 CMD 的魅力

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

力扣刷题部分笔记

Leetcode 力扣刷题笔记,记录了几个月来的题目记录,将会继续保持刷题~ 2024.01 1768.交替合并字符串 创建字符串不需要声明长度(动态分配内存),push_back()可以加入某个字符,append()一般用于添加字符串…

js的qq换肤效果

文章目录 1. 演示效果2. 分析思路3. 代码实现3.1. 方式一3.2. 方式二3.3. 整体代码 1. 演示效果 2. 分析思路 先编写样式,弄好布局和排版。遍历这个集合,对每个图片元素(img)添加一个点击事件监听器。可以使用 for 或者 forEach …

IT外包服务:企业数据资产化加速利器

随着数字化时代的兴起,数据成为企业最为重要的资源之一。数据驱动创新对于企业的竞争力和可持续发展至关重要。在这一进程中,IT外包服务发挥着关键作用,加速企业数据资产化进程,为企业提供了重要支持。 首先,IT外包服务…

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

计算机网络(五) 传输层

传输层 一、传输层概述二、TCP1.报文段格式2.连接管理3.可靠传输4.流量控制5.拥塞控制 三、UDP1.报文段格式2.校验 一、传输层概述 从通信和信息处理的角度看&#xff0c;传输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功…

微信小程序纯CSS实现好看的加载动画

进入下面小程序可以体验效果&#xff1a; WXML: <wxs module"img" src"./loading.wxs"></wxs> <view class"loading-container {{show?:loading-container-hide}}"><view class"loading-mask" wx:if"{{ma…

LNMP环境:揭秘负载均衡与高可用性设计

lb1: 192.168.8.5 lb2: 192.168.8.6 web1:192.168.8.7 web2:192.168.8.8 php-fpm: 192.168.8.9 mysql: 192.168.8.10 nfs:192.168.8.11 分别插入镜像 8.5-8.8 分别安装nginx,并设置启动 8.9 安装php 8.10 安装mysql 先配置一台web服务器然后同步 设置网站根目录 cp -…

WebGL BabylonJS GUI 如何创建连接模型的按钮

如图所示&#xff1a; 方法&#xff1a; createGUI(mesh: BABYLON.Mesh, title: string, index: number) {const advancedTexture AdvancedDynamicTexture.CreateFullscreenUI(UI)const rect new Rectangle()rect.width 100pxrect.height 40pxrect.thickness 0advancedT…

在CentOS 8.5.2111下安装vncserver tigervnc-server

# 参考&#xff1a; How to Install TigerVNC Server on CentOS 8 前提&#xff1a; 默认用root操作所有命令 安装桌面GUI dnf groupinstall "Server with GUI" 安装tigervnc-server dnf install tigervnc-server 增加vncuser用户&#xff08;这里默认就是vncuse…

刷题之Leetcode704题(超级详细)

704. 二分查找 力扣题目链接(opens new window)https://leetcode.cn/problems/binary-search/ 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&am…

VRRP虚拟路由器冗余协议

vrrp是为了解决单点故障问题 将几台路由器联合成一台虚拟的路由器&#xff0c;保证通信的可靠性 协议小说&#xff1a; 协议不是在固定的哪一个层&#xff0c;是基于哪一层工作&#xff0c;比如说ospf是基于三层工作的 VRRP是基于三层工作的&#xff0c;就在前面会封装一个ip…

GD32F470_ADS1115 超小型 16位 模数转换器 ADC 4通道模块移植

2.9 ADS1115多路模数转换器 ADS1115 器件是兼容 IIC 的 16 位高精度低功耗模数转换器 (ADC)&#xff0c;采用超小型无引线 X2QFN-10 封装和 VSSOP-10 封装。ADS111x 器件采用了低漂移电压基准和振荡器。ADS1114 和 ADS1115 还采用可编程增益放大器(PGA)和数字比较器。这些特性加…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

HCIA-RS基础-STP原理与配置

目录 STP&#xff08;生成树协议&#xff09;原理与配置1. 生成树的产生原因2. 生成树协议的基本原理3. 生成树协议的简单配置4. STP 存在的问题 总结 STP&#xff08;生成树协议&#xff09;原理与配置 1. 生成树的产生原因 在计算机网络中&#xff0c;生成树&#xff08;Sp…

Burp内置浏览器报错提示网页证书无效的解决方式

在Proxy——代理设置中——翻到底&#xff0c;勾选忽略浏览器的Burp错误信息 然后刷新你的网页&#xff0c;就可以按常规操作&#xff0c;点击“继续访问”&#xff0c;打开网页了

Python数据分析和机器学习库之imbalanced-learn使用详解

概要 在实际的数据分析和机器学习任务中,经常会遇到数据不平衡的情况,即不同类别的样本数量差异较大,这会导致模型训练和预测的不准确性。Python的imbalanced-learn库提供了一系列处理不平衡数据的方法和工具,帮助开发者更好地应对这一问题。本文将深入探讨imbalanced-lea…

蓝桥杯算法题:区间移位

题目描述 数轴上有n个闭区间&#xff1a;D1,...,Dn。 其中区间Di用一对整数[ai, bi]来描述&#xff0c;满足ai < bi。 已知这些区间的长度之和至少有10000。 所以&#xff0c;通过适当的移动这些区间&#xff0c;你总可以使得他们的“并”覆盖[0, 10000]——也就是说[0, 100…

zdpcss_transparent_animation_login:使用纯HTML+CSS+JS开发支持设置主题和带动画的科技风登录界面

废话不多说&#xff0c;先上图&#xff0c;有图有真相&#xff1a; 在左下角有一排颜色&#xff0c;点击可以设置主题色&#xff1a; 比如&#xff0c;我这里点击了橙色&#xff0c;登录界面就变成了如下样子&#xff1a; 另外&#xff0c;在输入账号和密码的时候&#x…

集合系列(十七) -List集合移除元素相关的操作介绍

一、问题由来 在实际开发的时候&#xff0c;我们经常会碰到这么一个困难&#xff1a;一个集合容器里面有很多重复的对象&#xff0c;里面的对象没有主键&#xff0c;但是根据业务的需求&#xff0c;实际上我们需要根据条件筛选出没有重复的对象。 比较暴力的方法&#xff0c;…