鸿蒙 HarmonyOs 动画效果 快速入门

news2025/1/17 21:34:39

一、理论

1.1 animation属性

名称参数类型必填描述
durationnumber设置动画时长,默认值:1000,单位:毫秒
temponumber动画播放速度。数值越大,速度越快,默认为1
curvestring | Curve

设置动画曲线。

默认值:Curve.EaseInOut,平滑开始和结束

delaynumber设置动画延迟执行的时长。默认值为0,毫秒
iterationsnumber

设置播放次数。

默认值:1,取值范围:[-1, +∞]

设置为 -1 表示无限次播放。

playModePlayMode设置动画播放模式,默认播放完成后重头开始播放。默认值:PlayMode.Normal
onFinish()=>void状态回调,动画播放完成时触发

1.2 组件转场效果

参数名参数类型必填描述
typeTransitionType类型,默认组件爱你新增和删除,默认为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是旋转角度

二、实操

2.1 示例:旋转图片

示例代码:

@Entry
@Component
struct Index {

  @State angle:number = 0
  build(){
    Column(){
      //显示图片
      Image($r('app.media.one'))
        .width(120)
        .rotate({
          angle:this.angle,
          centerX:'50%',
          centerY:'50%'
        })
        .animation({
          duration:1000,
          onFinish:()=>{

            console.log('结束时:'+this.angle)

          }
        })

      Button('动画开始')
        .onClick(()=>{
          this.angle += 360
        })
    }
    .width('100%')
    .height('100%')
  }
}

2.2 示例:平移、旋转、缩放

其中scale的值为缩放比例,所以1为初始值,2则表示原有的1倍

其中rotate的值为1则表示以该轴旋转,0则不以该轴旋转

示例效果:

示例代码:

@Entry
@Component
struct Index {

  @State angle:number = 0
  @State rotateX:number = 0
  @State rotateY:number = 0
  @State rotateZ:number = 0

  @State translateX:number = 0
  @State translateY:number = 0
  @State scaleX:number =  1
  @State scaleY:number =  1
  build(){
    Column(){
      //显示图片
      Image($r('app.media.one'))
        .width(120)
        .rotate({
          angle:this.angle,
          x:this.rotateX,
          y:this.rotateY,
          z:this.rotateZ,
          centerX:'50%',
          centerY: '50%',
        })
        .animation({
          duration:1000,
          onFinish:()=>{

            console.log('结束时:'+this.angle)
          }
        })
        .translate({
          x:this.translateX,
          y:this.translateY
        })
        .scale({
          x:this.scaleX,
          y:this.scaleY,
          centerX:'50%',
          centerY: '50%',
        })

      Blank()
      Row(){
        Column(){

          Image($r('app.media.ic_public_arrow_up_0'))
            .width(40)
            .backgroundColor(Color.White)
            .borderRadius(20)
            .onClick(()=>{
              this.translateY -= 50
            })

          Row(){
            Image($r('app.media.ic_public_arrow_left'))
              .width(40)
              .backgroundColor(Color.White)
              .borderRadius(20)
              .onClick(()=>{
                this.translateX -= 50
              })

            Image($r('app.media.ic_public_arrow_right'))
              .width(40)
              .backgroundColor(Color.White)
              .borderRadius(20)
              .onClick(()=>{
                this.translateX += 50
              })

          }.width(130)
          .justifyContent(FlexAlign.SpaceBetween)


          Image($r('app.media.ic_public_arrow_down_0'))
            .width(40)
            .backgroundColor(Color.White)
            .borderRadius(20)
            .onClick(()=>{
              this.translateY += 50
            })

        }.width(200)

        Column({space:20}){


          Button('旋转一圈动画开始')
            .onClick(()=>{
              this.rotateZ = 1
              this.angle += 360
            })

          Button('放大一倍')
            .onClick(()=>{
              this.scaleX *= 2
              this.scaleY *= 2
            })

          Button('缩小一倍')
            .onClick(()=>{
              this.scaleX /= 2
              this.scaleY /= 2
            })


        }.padding(10)




      }.width('100%')
      .backgroundColor(Color.Gray)




    }
    .width('100%')
    .height('100%')
  }
}

2.3 示例:简单摇骰子效果

示例效果:

示例代码:

@Entry
@Component
struct Index {

  @State dice:Resource[] = [
    $r('app.media.one'),
    $r('app.media.two'),
    $r('app.media.three'),
    $r('app.media.four'),
    $r('app.media.five'),
    $r('app.media.six')
  ]

  @State currentDice:Resource = this.dice[0]
  @State angle:number = 0
  @State rotateX:number = 0
  @State rotateY:number = 1
  @State rotateZ:number = 0
  @State opacityNumber:number = 1
  @State runState:boolean = false
  build(){
    Column(){
      //显示图片
      Image(this.currentDice)
        .width(120)
        .rotate({
          angle:this.angle,
          x:this.rotateX,
          y:this.rotateY,
          z:this.rotateZ,
          centerX:'50%',
          centerY: '50%',
        })
        .animation({
          duration:1000,
          curve:Curve.EaseInOut,
          onFinish:()=>{
            this.opacityNumber = 1
            console.log('结束时:'+this.angle)
          },

        })
        .opacity(this.opacityNumber)



      Button('摇骰子')
        .width(200)
        .onClick(()=>{

          this.opacityNumber = 0.8
          this.angle += 360

          setTimeout(()=>{
            this.currentDice = this.dice[Math.floor(Math.random() * this.dice.length)];
          },1000)
          
        })
      
    }
    .width('100%')
    .height('100%')
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在node环境使用MySQL

什么是Sequelize? Sequelize是一个基于Promise的NodeJS ORM模块 什么是ORM? ORM(Object-Relational-Mapping)是对象关系映射 对象关系映射可以把JS中的类和对象,和数据库中的表和数据进行关系映射。映射之后我们就可以直接通过类和对象来操作数据表和数据了, 就…

昇思25天学习打卡营第13天|MindNLP ChatGLM-6B StreamChat

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 1 环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspo…

len()函数——计算字符串长度或元素个数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 len()函数的主要功能是获取一个(字符、列表、元组等)可迭代对象的长度或项目个数。其语法格式如下: l…

精密空气加热器负载组

小型便携式 :精密空气加热器(负载组)能够对数据中心热通道/冷通道冷却系统进行全面测试。EAK 是一款 19 英寸机架式设备(10U 高),可轻松安装到各种标准服务器机架中。通过集成可调节的热量水平(…

【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?

文章目录 一、什么是内存抖动?内存抖动的问题卡顿OOM(Out Of Memory)二、什么是内存泄漏(Memory Leak)?引用计数法可达性分析法一、什么是内存抖动? 在Java中,每创建一个对象,就会申请一块内存,存储对象信息; 每分配一块内存,程序的可用内存也就少一块; 当程序…

java设计模式(十二)享元模式(Flyweight Pattern)

1、模式介绍: 享元模式是一种结构型设计模式,旨在通过共享对象来有效支持大量细粒度的对象。它通过将对象的状态分为内部状态(可共享)和外部状态(不可共享)来减少内存消耗和提高性能。内部状态存储在享元对…

SpringMVC基础详解

文章目录 一、SpringMVC简介1、什么是MVC2、MVC架构模式与三层模型的区别3、什么是SpringMVC 二、HelloWorld程序1、pom文件2、springmvc.xml3、配置web.xml文件4、html文件5、执行Controller 三、RequestMapping注解1、value属性1.1、基础使用1.2、Ant风格(模糊匹配…

详细分析Java中@RequiredArgsConstructor注解的基本知识(附Demo)

目录 前言1. 基本知识2. 源码解读3. Demo3.1 简易Demo3.2 staticName属性3.3 onConstructor属性3.4 access属性 4. AllArgsConstructor比较 前言 从源码中学习,事因是看到项目代码中有所引用 RequiredArgsConstructor 是 Lombok 提供的一个注解,用于自…

容器:deque

以下是对于deque容器知识的整理 1、构造 2、赋值 3、大小操作 4、插入 5、删除 6、数据存取 7、排序 #include <iostream> #include <deque> #include <algorithm> using namespace std; /* deque容器&#xff1a;双端数组&#xff0c;可以对头端进行插入删…

2024年06月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 2 分,共 30 分) 第1题 小杨父母带他到某培训机构给他报名参加 CCF 组织的 GESP 认证考试的第 1 级,那他可以选择的认证语言有几…

树状数组——点修区查与区修点查

树状数组是一种代码量小&#xff0c;维护区间的数据结构 他可以实现&#xff1a; 1.区间修改&#xff0c;单点查询 2.单点修改&#xff0c;区间查询 当然&#xff0c;二者不可兼得&#xff0c;大人全都要的话&#xff0c;请选择线段树 前置知识&#xff1a; lowbit(x)操作…

zerotier-one自建根服务器方法四

一、简介 前面几篇文章已经写完了安装配置服务器&#xff0c;今天写一下客户端如何连接自建的服务器。 二、准备工作 准备一个有公网IP的云主机。 要稳定性、安全性、不差钱的可以使用阿里、腾讯等大厂的云服务器。 本人穷屌丝一枚&#xff0c;所以我用的是免费的“三丰云…

常见sql语句练习

Tips&#xff1a;之前查看网上的文章感觉太乱了&#xff0c;所以自己整理了一套sql语句来练习&#xff0c;主要也可以拿来应对面试&#xff0c;需要的可以自行下载练习 包含基本语句、聚合函数、模糊查询、范围查询、排序、聚合、分组、分页、子查询、索引和视图、左右连接、双…

商城积分系统的代码实现(下)-- 积分订单的退款与结算

一、接着上文 用户在消耗积分的时候&#xff0c;需要根据一定的逻辑&#xff0c;除了扣减账户的当前余额&#xff0c;还需要依次消费积分订单的余额。 private void updatePointsOrderByUse(Integer schoolId, Long userId, String pointsType, int usingPoints) {List<Po…

数字证书与PKI解析

目录 1. 什么是数字证书 2. 为什么需要数字证书 3. 数字证书的格式 4. 什么是PKI 5. PKI的组成要素组件 5.1 用户 5.2 认证机构&#xff08;CA&#xff09; 5.3 仓库 5.4 PKI的体系结构 5.4.1 层次结构模型 5.4.2 交叉证明模型 5.4.3 混合模型 1. 什么是数字证书 要…

Django任意URL跳转漏洞(CVE-2018-14574)

目录 Django介绍 URL跳转漏洞介绍 Django任意URL跳转漏洞介绍 环境搭建 防御方法 前段时间在面试时&#xff0c;问到了URL跳转漏洞&#xff0c;我没有回答好&#xff0c;下午把URL跳转漏洞学习了&#xff0c;发现也不难&#xff0c;看来还需要学习的东西很多呀&#xff0c…

burp靶场xss漏洞(中级篇)下

靶场地址 All labs | Web Security Academy 第九关&#xff1a;反射型&#xff08; 转义&#xff09; 1.在搜索框随机输入字符并用Burp抓包 2.测试不同字符在JavaScript字符串中的反映&#xff0c;发现查询结果被包裹在script标签中 而单引号会被转义为 \ 3.构造payload跳出j…

Qt开发报错:Q_INTERFACES Error: Undefined interface

1、背景 VS2019qt5.12.10 从svn拉下来的项目&#xff0c;结果报错&#xff1a; Q_INTERFACES Error: Undefined interface 之前在VS的扩展中在线安装了qt插件&#xff0c; 安装了一半&#xff0c;比较慢&#xff0c;直接强行退出了。。 后来安装了qt官网的插件。。。。 2、报…

OpenCV 调用自定义训练的 YOLO-V8 Onnx 模型

一、YOLO-V8 转 Onnx 在本专栏的前面几篇文章中&#xff0c;我们使用 ultralytics 公司开源发布的 YOLO-V8 模型&#xff0c;分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务&#xff0c;实验后发现效果都非常的不错&#xff0c;但是前面的演示都是基于 ultralytics…

【SpringCloud】Zuul源码解析

Zuul是一个网关组件&#xff0c;是微服务的入口&#xff0c;网关会根据配置将请求转发给指定的服务。本章分析Zuul组件是如何实现请求过滤和转发的 参考源码&#xff1a;<spring-cloud.version>Hoxton.SR9</spring-cloud.version> 1、过滤 spring-cloud-netflix-…