第九节HarmonyOS 常用基础组件21-ImageAnimator

1、描述

提供帧动画组件来实现逐帧播放图片的能力,可以配置需要播放的图片列表,每张图片可以配置时长。

2、接口

ImageAnimator()

3、属性

参数名

参数类型

描述

images

Array<ImageFrameInfo>

设置图片帧信息集合,每一帧的帧信息(ImageFrameInfo)包含图片路径,图片大小、图片位置和图片播放时长信息。

state

AnimationStatus

默认为初始状态,用于控制 播放状态。

默认值:AnimationStatus.Initial

duration

number

单位为毫秒。默认时长为1000ms;duration为0时不播放图片;

reverse

boolean

设置播放顺序;false表示从第1张图片播放到最后1张;true表示从最后1张播放到第1张图片。

默认值:false

fixedSize

boolean

设置图片大小是否固定为组件大小;true表示图片大小与组件大小一致,此时设置图片的一些属性是无效的(width、height、top、left等)。false表示每一张图片的width、height、top、left属性都要单独设置。

默认值:true

fillMode

FillMode

设置动画开始与结束后的状态。

默认值:FillMode.Forwards

Iterations

number

默认播放一次,设置为-1时表示无限次播放。

默认值:1

4、ImageFrameInfo对象说明

参数名

参数类型

必填

描述

src

string | Resource

图片路径,图片格式svg、png、jpg。

width

number | string

图片宽度,默认值:0。

height

number | string

图片高度,默认值:0。

top

number | string

图片相对于组件左上角的纵向坐标,默认值:0。

left

number | string

图片相对于组件左上角的横向坐标,默认值:0。

duration

number

每一帧图片播放的时长,单位毫秒,默认值:0。

5、AnimationStatus对象说明

名称

描述

Initial

动画初始状态。

Running

动画处于播放状态。

Paused

动画处于暂停状态。

Stopped

动画处于停止状态。

6、FillMode对象说明

名称

描述

None

动画未执行时不会将任何样式应用于目标,动画播放完成之后恢复初始默认状态。

Forwards

目标将保留动画执行期间最后一个关键帧状态。

Backwards

动画将在应用于目标时立即应用第一个关键帧的值,并在delay期间保留此值。第一个关键帧取决于playMode,playMode为Normal或Alternate时为form的状态,playMode为Reverse或AlternateReverse时为to的状态。

Both

动画将遵循Forwards和Backwards的规则,从而在两个方向上拓展动画属性。

7、事件

onStart(event: () => void) - 状态回调,动画开始播放时触发。

onPause(event: () => void) - 状态回调,动画暂停播放时触发。

onRepeat(event: () => void) - 状态回调,动画重复播放时触发。

onCancel(event: () => void) - 状态回调,动画取消播放时触发。

onFinish(event: () => void) - 状态回调,动画播放完成时触发。

8、示例

import router from '@ohos.router'

@Entry
@Component
struct ImageAnimatorPage {
  @State message: string = '提供帧动画组件来实现逐帧播放图片的能力,可以配置需要播放的图片列表,每张图片可以配置时长。'
  @State arrayImgs: ImageFrameInfo[] = [{
    src: $r('app.media.android'),
  }, {
    src: $r('app.media.java'),
  }, {
    src: $r('app.media.harmony'),
  }, {
    src: $r('app.media.css'),
  }, {
    src: $r('app.media.java_script'),
  }, {
    src: $r('app.media.typescript'),
  }]
  @State state: AnimationStatus = AnimationStatus.Initial;
  @State reverse:boolean = false;
  @State iterations:number = 1;


  build() {
    Row() {
      Scroll() {
        Column() {
          Text(this.message)
            .fontSize(20)
            .fontWeight(FontWeight.Bold)
            .width("96%")
          Blank(12)

          ImageAnimator()
            .images(this.arrayImgs)// 加载资源
            .duration(2000)// 设置动画间时长
            .state(this.state) // 控制播放状态
            .reverse(this.reverse) // 设置播放顺序。false表示从前到后,true表示从后往前,默认值:false。
            .iterations(this.iterations) // 设置默认播放次数,-1时无限次播放,默认值1.
            .width("96%")
            .height(200)

          Row() {
            Button('开始').width(100).padding(5).onClick(() => {
              this.state = AnimationStatus.Running
            }).margin(5)
            Button('暂停').width(100).padding(5).onClick(() => {
              this.state = AnimationStatus.Paused // 显示当前帧图片
            }).margin(5)
            Button('停止').width(100).padding(5).onClick(() => {
              this.state = AnimationStatus.Stopped // 显示动画的起始帧图片
            }).margin(5)
          }

          Row() {
            Button('播放顺序').width(100).padding(5).onClick(() => {
              this.reverse = !this.reverse
            }).margin(5)
            Button('循环次数').width(100).padding(5).onClick(() => {
              this.iterations = 2
            }).margin(5)
            Button('无限循环').width(100).padding(5).onClick(() => {
              this.iterations = -1 // 无限循环播放
            }).margin(5)
          }

          Blank(12)
          Button("ImageAnimator文本文档")
            .fontSize(20)
            .backgroundColor('#007DFF')
            .width('96%')
            .onClick(() => {
              // 处理点击事件逻辑
              router.pushUrl({
                url: "pages/baseComponent/imageAnimator/ImageAnimatorDesc",
              })
            })
          Blank(12)

        }
        .width('100%')
      }
    }
    .padding({ top: 12, bottom: 12 })
  }
}

9、效果图

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

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

相关文章

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…

二叉树-堆应用(1)

目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆&#xff08;直…

android远程投屏应用

客户端app地址&#xff1a;https://gitee.com/youzilzk/blue1.git 服务端地址&#xff1a;https://gitee.com/youzilzk/blue-server1.git 一。服务端部署 1.安装postgres 2.导入项目下blue.sql文件 3.修改配置application.properties和config.properties&#xff0c;其中applic…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 主要包含如下文件&#xff1a; static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

人工智能福利站,初识人工智能,机器学习,第三课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

备战蓝桥杯---数据结构与STL应用(优先队列的小细节)

很显然&#xff0c;我们先二分求X,对于验证&#xff0c;一开始我先想的是直接求每个的不足电量再除充电量后向上取整&#xff0c;然后判断与k的大小关系。事实上&#xff0c;如果让k很大&#xff0c;若有两只手机在下一刻多没电&#xff0c;显然上述方法得出的结论是错误的&…

Java的常见api以及异常情况-1

目录 1、什么是API &#xff1f; 2、Object类 3、equals方法 4、内存中的比较方法 5、instanceof 关键字 1、什么是API &#xff1f; 1.API(Application ProgrammingInterface,应用程序编程接口)2.Java中的API 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将…

前端JavaScript篇之实现一个将多维数组展示的方法有哪些,分别是?

目录 实现一个将多维数组展示的方法有哪些&#xff0c;分别是&#xff1f;方法一&#xff1a;递归展开成一维数组方法二&#xff1a;嵌套展示结构方法三&#xff1a;ES6新增的数组扩展方法 flat()方法四&#xff1a;apply() 结合 concat() 使用以展开成一维数组方法五&#xff…

快速排序|超详细讲解|入门深入学习排序算法

快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是&#xff1a;选择一个基准数&#xff0c;通过一趟排序将要排序的数据分割成独立的两部分&#xff1b;其中一部分的所有数据都比另外一部分的所有数据都要小。然后&#xff0c;再按此方法对这两部分数据分别进…

低密度奇偶校验码LDPC(五)——译码算法概述

一、译码算法概述 二、置信传播原理 Bayesian点兵问题 Turbo原理

【CSS3】flex布局实践篇 | 7种常见网页布局方案

1、垂直居中 垂直居中一度是前端面试时必问知识点。 目前的垂直解决方案 使用了 从负外边距 到 display:table-cell 等荒谬的奇技淫巧&#xff0c;包括全高的伪元素。这些方法是又复杂又难写。 不知道大家第一次使用flex布局做什么&#xff0c;反正我是用来做垂直居中&#xf…

2023 IoTDB Summit:华润电力技术研究院副院长郭为民《新型时序数据库在智能发电领域的应用探索与展望》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

【python】在python中使用单元测试unittest

在python中使用单元测试unittest 大家好&#xff0c;欢迎来到我的技术乐园&#xff01;今天&#xff0c;我们将一起踏入Python单元测试的奇妙旅程&#xff0c;探索这个让我们的代码更可靠、更强壮的令人愉快的世界。 前言&#xff1a;为什么单元测试如此重要&#xff1f; 在我…

分布式搜索引擎_学习笔记_2

分布式搜索引擎_学习笔记_2 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用…

探索微服务治理:从发展到实践构建高效稳定的系统|服务注册与发现技术解析

随着软件行业的不断发展&#xff0c;微服务架构凭借其高度的灵活性、可扩展性和可维护性&#xff0c;逐渐成为企业应用的主流架构风格。然后微服务架构的复杂性也带来了一系列的挑战&#xff0c;其中之一就是如何有效地管理和治理微服务。本文灸哥给你详细介绍和服务治理相关的…

Python笔记(二)—— Python判断语句

2.1 布尔类型和比较运算符 布尔类型用于表示&#xff1a;真和假 比较运算符用于计算&#xff1a;真和假 1. 布尔&#xff08;bool&#xff09;表示现实生活中的逻辑&#xff0c;即真和假 True表示真False表示假 True本质上是一个数字记作1&#xff0c;False记作0 定义变…

检测CUDA 是否能访问GPU时回应速度慢【笔记】

SUPWEMICRO 418G-Q20X12 维护记录&#xff1a; 两台设备均已安装CUDA与Pytorch&#xff0c;在检测CUDA 是否能访问GPU&#xff0c;执行torch.cuda.is_available()命令时&#xff0c;一台设备速度秒回应True&#xff0c;但另外一台设备回应速度慢&#xff08;1分钟左右&#xff…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中&#xff0c;界面通常都是动态的。下图所示&#xff0c;在子目标列表中&#xff0c;当用户点击目标一&#xff0c;目标一会呈现展开状态&#xff0c;再次点击目标一&#xff0c;目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…

Linux一些实用操作

学习笔记&#xff0c;记录以下课程中关于Linux的一些实用操作。黑马程序员新版Linux零基础快速入门到精通&#xff0c;全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等_哔哩哔哩_bilibili 目录 1 各类小技巧&#xff08;快捷键&#xff…

【RT-DETR有效改进】 利用Damo-YOLO的RepGFPN改进特征融合层(高效重参数化Neck)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是Damo-YOLO的RepGFPN(重参数化泛化特征金字塔网络),利用其优化RT-DETR的Neck部分,可以在不影响计算量的同时大幅度涨点(亲测在小目标和大目标检测的数据集上效果均表现良好涨点幅…