基础ArkTS组件:帧动画,内置动画组件,跑马灯组件(HarmonyOS学习第三课【3.6】)

news2024/11/26 14:40:51

帧动画

帧动画也叫序列帧动画,其原理就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。ArkUI开发框架提供了 ImageAnimator 组件实现帧动画能力,本节笔者介绍一下 ImageAnimator 组件的简单使用。

官方文献

说明

该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

接口

ImageAnimator()

属性

除支持通用属性外,还支持以下属性:

参数名称

参数类型

参数描述

images

Array<ImageFrameInfo>

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

默认值:[]

说明:

不支持动态更新。

state

AnimationStatus

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

默认值:AnimationStatus.Initial

duration

number

单位为毫秒,默认时长为1000ms;duration为0时,不播放图片;值的改变只会在下一次循环开始时生效;当images中任意一帧图片设置了单独的duration后,该属性设置无效。

默认值:1000

reverse

boolean

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

默认值:false

fixedSize

boolean

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

默认值:true

preDecode(deprecated)

number

预解码的图片数量。例如该值设为2,则播放当前页时会提前加载后面两张图片至缓存以提升性能。

从API version9开始废弃。

默认值:0

fillMode

FillMode

设置动画开始前和结束后的状态,可选值参见FillMode说明。

默认值:FillMode.Forwards

iterations

number

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

默认值:1

ImageFrameInfo对象说明

参数名称

参数类型

必填

参数描述

src

string | Resource9+

图片路径,图片格式为svg,png和jpg,从API Version9开始支持Resource类型的路径。

width

number | string

图片宽度。

默认值:0

height

number | string

图片高度。

默认值:0

top

number | string

图片相对于组件左上角的纵向坐标。

默认值:0

left

number | string

图片相对于组件左上角的横向坐标。

默认值:0

duration

number

每一帧图片的播放时长,单位毫秒。

默认值:0

事件

除支持通用事件外,还支持以下事件:

名称

功能描述

onStart(event: () => void)

状态回调,动画开始播放时触发。

onPause(event: () => void)

状态回调,动画暂停播放时触发。

onRepeat(event: () => void)

状态回调,动画重复播放时触发。

onCancel(event: () => void)

状态回调,动画取消播放时触发。

onFinish(event: () => void)

状态回调,动画播放完成时触发。

拓展部分

ImageAnimator定义介绍

interface ImageAnimatorInterface {
  (): ImageAnimatorAttribute;
}

由源码可知,ImageAnimator 组件不需要设置额外的配置参数。

ImageAnimator属性介绍

declare class ImageAnimatorAttribute extends CommonMethod<ImageAnimatorAttribute> {
  images(
    value: Array<{
      src: string;
      width?: number | string;
      height?: number | string;
      top?: number | string;
      left?: number | string;
      duration?: number;
    }>,
  ): ImageAnimatorAttribute;
  state(value: AnimationStatus): ImageAnimatorAttribute;
  duration(value: number): ImageAnimatorAttribute;
  reverse(value: boolean): ImageAnimatorAttribute;
  fixedSize(value: boolean): ImageAnimatorAttribute;
  preDecode(value: number): ImageAnimatorAttribute;
  fillMode(value: FillMode): ImageAnimatorAttribute;
  iterations(value: number): ImageAnimatorAttribute;
}
  • images:设置图片帧信息集合。每一帧的帧信息包含图片路径、图片大小、图片位置和图片播放时长信息。详细说明如下:
    • src:图片路径,图片格式为 svg ,png , jpg 和 webp 。
    • width:图片宽度。
    • height:图片高度。
    • top:图片相对于组件左上角的纵向坐标。
    • left:图片相对于组件左上角的横向坐标。
    • duration:每一帧图片的播放时长,单位毫秒。
  • state:设置播放状态, AnimationStatus 定义了以下 4 中状态:
    • Initial(默认值):动画初始状态。
    • Running:动画处于播放状态。
    • Paused:动画处于暂停状态。
    • Stopped:动画处于停止状态。
  • fixedSize:设置图片大小是否固定为组件大小。 true 表示图片大小与组件大小一致,此时设置图片的 width 、 height 、 top 和 left 属性是无效的。 false 表示每一张图片的 width 、 height 、 top 和 left 属性都要单独设置。
  • preDecode:是否启用预解码,默认值为 0 ,即不启用预解码,如该值设为 2 ,则播放当前页时会提前加载后面两张图片至缓存以提升性能。
  • fillMode:设置动画开始前和结束后的状态, FillMode 参数类型说明如下:
    • None:播放完成后恢复初始状态。
    • Forwards:播放完成后保持动画结束时的状态。
  • iterations:设置播放次数,设置为 -1 时表示无限次播放。

简单样例如下所示:

@Entry
@Component
struct ImageAnimatorTest {
  build() {
    Column({ space: 10 }) {
      ImageAnimator()
        .images([ // 序列帧资源数组
          {
            src: "/pages/loading_01.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_02.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_03.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_04.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_05.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_06.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_07.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_08.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_09.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_10.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_11.png", // 图片帧资源
            duration: 150 // 播放时长
          },
          {
            src: "/pages/loading_12.png", // 图片帧资源
            duration: 150 // 播放时长
          }
        ])
        .state(AnimationStatus.Running) // 设置正在播放状态
        .iterations(-1) // 设置无限循环播放
        .preDecode(2) // 预加载2张图片
        .width(60)
        .height(60)
    }
    .width('100%')
    .height("100%")
    .padding(10)
  }
}

每一帧图片自行配置即可逐帧播放

官方案例:

// xxx.ets
@Entry
@Component
struct ImageAnimatorExample {
  @State state: AnimationStatus = AnimationStatus.Initial
  @State reverse: boolean = false
  @State iterations: number = 1

  build() {
    Column({ space: 10 }) {
      ImageAnimator()
        .images([
          {
            src: $r('app.media.img1')
          },
          {
            src: $r('app.media.img2')
          },
          {
            src: $r('app.media.img3')
          },
          {
            src: $r('app.media.img4')
          }
        ])
        .duration(2000)
        .state(this.state).reverse(this.reverse)
        .fillMode(FillMode.None).iterations(this.iterations).width(340).height(240)
        .margin({ top: 100 })
        .onStart(() => {
          console.info('Start')
        })
        .onPause(() => {
          console.info('Pause')
        })
        .onRepeat(() => {
          console.info('Repeat')
        })
        .onCancel(() => {
          console.info('Cancel')
        })
        .onFinish(() => {
          console.info('Finish')
          this.state = AnimationStatus.Stopped
        })
      Row() {
        Button('start').width(100).padding(5).onClick(() => {
          this.state = AnimationStatus.Running
        }).margin(5)
        Button('pause').width(100).padding(5).onClick(() => {
          this.state = AnimationStatus.Paused     // 显示当前帧图片
        }).margin(5)
        Button('stop').width(100).padding(5).onClick(() => {
          this.state = AnimationStatus.Stopped    // 显示动画的起始帧图片
        }).margin(5)
      }

      Row() {
        Button('reverse').width(100).padding(5).onClick(() => {
          this.reverse = !this.reverse
        }).margin(5)
        Button('once').width(100).padding(5).onClick(() => {
          this.iterations = 1
        }).margin(5)
        Button('infinite').width(100).padding(5).onClick(() => {
          this.iterations = -1 // 无限循环播放
        }).margin(5)
      }
    }.width('100%').height('100%')
  }
}

 内置动画组件

LoadingProgress 

用于显示加载动效的组件。 

说明

该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

接口

LoadingProgress()

创建加载进展组件。

从API version 9开始,该接口支持在ArkTS卡片中使用。

属性

名称

参数类型

描述

color

ResourceColor

设置加载进度条前景色。

从API version 9开始,该接口支持在ArkTS卡片中使用。

 官方案例:

// xxx.ets
@Entry
@Component
struct LoadingProgressExample {
  build() {
    Column({ space: 5 }) {
      Text('Orbital LoadingProgress ').fontSize(9).fontColor(0xCCCCCC).width('90%')
      LoadingProgress()
        .color(Color.Blue)
    }.width('100%').margin({ top: 5 })
  }
}

跑马灯组件

跑马灯组件,用于滚动展示一段单行文本,仅当文本内容宽度超过跑马灯组件宽度时滚动。

使用跑马灯组件我们可以按照自己想要的样式来设定跑马灯

Marquee

说明

该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

接口

Marquee(value: { start: boolean, step?: number, loop?: number, fromStart?: boolean, src: string })

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名

参数类型

必填

参数描述

start

boolean

控制跑马灯是否进入播放状态。

说明:

有限的滚动次数播放完毕后,不可以通过改变start重置滚动次数重新开始播放。

step

number

滚动动画文本滚动步长。

默认值:6,单位vp

loop

number

设置重复滚动的次数,小于等于零时无限循环。

默认值:-1

说明:

ArkTS卡片上该参数设置任意值都仅在可见时滚动一次。

fromStart

boolean

设置文本从头开始滚动或反向滚动。

默认值:true

src

string

需要滚动的文本。

属性

除支持文本通用属性:fontColor、fontSize、fontWeight、fontFamily外,还支持以下属性:

名称

参数类型

描述

allowScale

boolean

是否允许文本缩放。

暂不支持该接口。

默认值:false

事件

名称

功能描述

onStart(event: () => void)

开始滚动时触发回调。

从API version 9开始,该接口支持在ArkTS卡片中使用。

onBounce(event: () => void)

完成一次滚动时触发,若循环次数不为1,则该事件会多次触发。

从API version 9开始,该接口支持在ArkTS卡片中使用。

onFinish(event: () => void)

滚动全部循环次数完成时触发回调。

从API version 9开始,该接口支持在ArkTS卡片中使用。

官方案例:

// xxx.ets
@Entry
@Component
struct MarqueeExample {
  @State start: boolean = false
  private fromStart: boolean = true
  private step: number = 50
  private loop: number = Infinity
  private src: string = "Running Marquee starts rolling"

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Marquee({
        start: this.start,
        step: this.step,
        loop: this.loop,
        fromStart: this.fromStart,
        src: this.src
      })
        .width(360)
        .height(80)
        .fontColor('#FFFFFF')
        .fontSize(48)
        .fontWeight(700)
        .backgroundColor('#182431')
        .margin({ bottom: 40 })
        .onStart(() => {
          console.info('Marquee animation complete onStart')
        })
        .onBounce(() => {
          console.info('Marquee animation complete onBounce')
        })
        .onFinish(() => {
          console.info('Marquee animation complete onFinish')
        })
      Button('Start')
        .onClick(() => {
          if(this.start==false){
            this.start = true   //播放
          }else{
            this.start = false; //暂停
          }
        })
        .width(120)
        .height(40)
        .fontSize(16)
        .fontWeight(500)
        .backgroundColor('#007DFF')
    }
    .width('100%')
    .height('100%')
  }
}

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

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

相关文章

编写Ansible角色实现分布式LNMP安装

前言 本文将介绍如何使用 Ansible 编写角色&#xff0c;在分布式环境下完成 LNMP&#xff08;Linux、Nginx、MySQL、PHP&#xff09;的自动化&#xff08;编译&#xff09;安装和配置&#xff0c;并验证 PHP 与 MySQL 数据联通性&#xff0c;实现博客和论坛页面的展示。 常规…

[数据集][目标检测]电力场景安全帽检测数据集VOC+YOLO格式295张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;295 标注数量(xml文件个数)&#xff1a;295 标注数量(txt文件个数)&#xff1a;295 标注类别…

Web自动化 - selenium

文章目录 一、selenium的使用selenium的安装 二、元素1. 定位选择元素1.id 定位2. class_name 定位find_element 和 find_elements的区别3. TAG_NAME 定位4. 超链接 定位 2. 操控元素1. 查询内容2. 获取元素文本内容3. 获取元素属性 3. 浏览器常用操作API4. 鼠标操作 - perform…

微信小程序 17:小程序使用 npm 包和组件应用

目前&#xff0c;小程序中已经支持实用 npm 安装第三方包&#xff0c;从而提高小程序的开发效率&#xff0c;但是在小程序中使用 npm 包有三个限制&#xff1a; 不支持 Node.js内置库的包不支持依赖于浏览器内置对象的包不支持依赖于 C插件的包 Vant Weapp Vant Weapp是有赞…

合专家模型 (MoE) 详解

本文转载自&#xff1a;混合专家模型 (MoE) 详解 https://huggingface.co/blog/zh/moe 英文版&#xff1a;https://huggingface.co/blog/moe 文章目录 一、简短总结二、什么是混合专家模型&#xff1f;三、混合专家模型简史四、什么是稀疏性?五、混合专家模型中令牌的负载均衡…

战火重燃!全球仓储机器人内卷大盘点~

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 随着全球经济的持续发展和电子商务的迅速崛起&#xff0c;仓储和物流行业正面临着前所未有的挑战与机遇。 在这个背…

LeetCode 题目 121:买卖股票的最佳时机

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

【C语言项目】贪吃蛇(下)

个人主页~ 源码在Gitee仓库~ 上一篇贪吃蛇&#xff08;上&#xff09;~ 贪吃蛇 四、核心的实现游戏测试1、GameStart&#xff08;1&#xff09;控制台窗口大小和名字设置&#xff08;2&#xff09;光标隐藏&#xff08;3&#xff09;打印欢迎界面&#xff08;4&#xff09;创建…

18 【Aseprite 作图】工具栏介绍

1 在没有输入法的情况下&#xff0c; 按住Shift 大写的N&#xff0c;就可以快速新建图层 ctrl z 撤回这个图层 2 双击图层&#xff0c;可以修改图层名称和属性 3 按住图层&#xff0c;拖动图层&#xff0c;可以把图层拉到 组&#xff0c;就可以方便一组一组管理图层 4 保存的…

Windows Docker 使用 httpd 部署静态 Web 站点

一、简介 httpd 是 Apache超文本传输协议&#xff08;HTTP&#xff09;服务器的主程序&#xff0c;是一个独立运行的后台进程&#xff0c;专门负责处理 HTTP 请求。它通过建立子进程或线程的池来高效管理请求&#xff0c;确保服务器能够迅速响应客户端的需求。httpd 因其高效率…

创新案例|为何农夫山泉创新战略升级为一家零售科技公司

农夫山泉上市的消息被公之于众后&#xff0c;几乎所有人都将目光投向了这家国内家喻户晓的饮料公司&#xff0c;谁都想第一时间内窥探它的庐山真面目。 当然&#xff0c;在此之前已经有多路消息通过旁敲侧击&#xff0c;从管窥中获取了一些农夫山泉的真实数据。 去年6月&…

全面了解 LLM 微调——根据应用场景独特需求定制大型语言模型

1.概述 截至2023年&#xff0c;大型语言模型&#xff08;LLM&#xff09;的发展确实在不断进步&#xff0c;涌现出了多种新的模型&#xff0c;如ChatGLM、Alpaca、Falcon以及Llama 2&#xff0c;还有GPT-4等。这些模型在自然语言处理领域展现出了强大的潜力&#xff0c;它们能…

Zookeeper 注册中心:单机部署

序言 本文给大家介绍 Zookeeper 单机部署流程、 如何与 Spring 整合使用。除此之外&#xff0c;还有 Zookeeper 作为注册中心与 SpringCloud 的整合流程。 一、部署流程 官网下载 Zookeeper 安装包 解压安装包到指定目录 进入 apache-zookeeper-3.8.4-bin/conf 目录&…

最大子矩阵:前缀和、动态规划

最近在学习动态规划&#xff0c;在牛客上刷题时碰到了这一题。其实最初的想法是暴力和前缀和&#xff0c;但是时间复杂度极高&#xff0c;需要套4层循环。后来去网上搜了一下相关的题解和做法&#xff0c;进而了解到了前缀和&#xff0b;线性动态规划的做法。但是在成功做出这题…

富阳区石弹村全景图-没拍到景点内容

- - - 石梯山庄旁停车场拍摄 建议雨后去 整个山到处都是消息 整座山都在渗水

Python 编程语言中的 None 到底是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 让我们一起深入了解 Python 中的 None。 什么是 None&#xff1f; 在 Python 编程语言中&#xff0c;None 是一个特殊的常量&#xff0c;它代表了 “无” 或 “没有值”。你可以把它想象成一个空盒子…

Redis-详解(基础)

文章目录 什么是Redis&#xff1f;用Redis的特点&#xff1f;用Redis可以实现哪些功能&#xff1f;Redis的常用数据类型有哪些?Redis的常用框架有哪些?本篇小结 更多相关内容可查看 什么是Redis&#xff1f; Redis&#xff08;Remote DictionaryServer&#xff09;是一个开源…

数据结构与算法===回溯法

文章目录 原理使用场景括号生成代码 小结 原理 回溯法是采用试错的思想&#xff0c;它尝试分步骤的去解决一个问题。在分步骤解决问题的过程中&#xff0c;当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候&#xff0c;它将取消上一步甚至是上几步的计算&#x…

NodeMCU ESP8266 获取I2C从机地址

文章目录 前言关于地址位读写位程序总结前言 I2C总线上可以挂载很多的从设备,每个设备都会有一个自己唯一的一个地址; 关于地址位 通常地址位占7位数据,主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址; 读写位 该位…

Github学习

1.Git与Github 区别: Git是一个分布式版本控制系统&#xff0c;简单的说就是一个软件&#xff0c;用于记录一个或若干个文件内容变化&#xff0c;以便将来查阅特点版本修订情况的软件。 Github是一个为用户提高Git服务的网站&#xff0c;简单说就是一个可以放代码的地方。Gi…