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

news/2024/7/21 9:53:02 标签: harmonyos, openHarmony, 前端

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、效果图


http://www.niftyadmin.cn/n/5356949.html

相关文章

学习JavaEE的日子 Day19 常用类

Day19 1.包装类的使用 理解&#xff1a;8种基本数据类型对应类 出现原因&#xff1a; ​ Java为纯面向对象语言(万物皆对象)&#xff0c;8种基本数据类型不能new对象&#xff0c; ​ 就破坏Java为纯面向对应语言的特征&#xff0c;Java又为8种基本数据类型分别 ​ 匹配了对应的…

【Java之HTML】

HTML 概念 互联网的产生&#xff1a;w3c的成立&#xff0c; ​ 互联网最开始设计的目的&#xff1a;看论文 ---->浏览器&#xff0c;HTML ​ 网络三要素&#xff1a;HTML HTTP URL HTML描述论文的格式 HTTP标记这个论文在网络上怎么传输 URL:指示这个论文在互联网的哪…

【2024.1.31练习】装箱问题

题目描述 题目思路 这是一个情形相对简单的背包问题。暴力搜索可能超时&#xff0c;因此考虑动态规划。建立二维数组&#xff0c;表示前个物品占用的总体积为&#xff0c;数组的元素为布尔类型&#xff0c;为true即为能达到该状态&#xff0c;false则表示不能到达该状态。 设…

恒创科技:云服务器公网带宽选择多少合适?有计算公式吗?

随着云计算技术的不断发展&#xff0c;越来越多的企业和个人选择使用云服务器来部署应用和存储数据。而在选择云服务器时&#xff0c;公网带宽是一个重要的参数&#xff0c;它直接影响到服务器的网络性能和数据传输速度。 公网带宽是指云服务器在互联网上的数据传输速率&#x…

Git - 在公司中,使用 git 的流程是什么?遇到冲突怎么办?

目录 一、公司中 git 的使用流程 1.1、设置用户签名 1.2、创建分支&#xff0c;提交代码到远程仓库 1.3、创建 pr&#xff0c;code review 1.4、意外情况&#xff1a;分支冲突 一、公司中 git 的使用流程 1.1、设置用户签名 刚进公司&#xff0c;肯定是先初始化个人的用户…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(三)NodeJS入门——http协议

033_HTTP协议_初识HTTP协议 hello&#xff0c;大家好&#xff0c;这个小节我们来认识一下 http协议。 http是几个单词的首字母拼写&#xff0c;全称为Hypertext Transfer Protocol 译为超文本传输协议&#xff0c;那么这个http协议是互联网上应用最广泛的协议之一。顺便说一下…

Java 数据结构篇 二叉树与红黑树详细讲解通俗易懂

二叉树&#xff08;Binary Tree&#xff09; 二叉树&#xff08;Binary Tree&#xff09; 二叉树是一种特殊的树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。二叉树可以是空的&#xff0c;也可以是由根节点以及左右两个子树…

无法解析的外部符号_WinMain@16

错误示例&#xff1a; #include <Windows.h>int main() {return 0; } 正确示例1&#xff1a; 控制台&#xff1a; #include <Windows.h>int main() {return 0; } 正确示例2&#xff1a; Windows窗口 #include <Windows.h>int WINAPI wWinMain(HINSTANC…