赞
踩
帧动画也叫序列帧动画,其原理就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。ArkUI开发框架提供了 ImageAnimator
组件实现帧动画能力,本节笔者介绍一下 ImageAnimator
组件的简单使用。
说明
该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
无
ImageAnimator()
除支持通用属性外,还支持以下属性:
参数名称 | 参数类型 | 参数描述 |
---|---|---|
images | Array<ImageFrameInfo> | 设置图片帧信息集合。每一帧的帧信息(ImageFrameInfo)包含图片路径、图片大小、图片位置和图片播放时长信息,详见ImageFrameInfo属性说明。 默认值:[] 说明: 不支持动态更新。 |
state | 默认为初始状态,用于控制播放状态。 默认值: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.Forwards | |
iterations | number | 默认播放一次,设置为-1时表示无限次播放。 默认值:1 |
参数名称 | 参数类型 | 必填 | 参数描述 |
---|---|---|---|
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) | 状态回调,动画播放完成时触发。 |
- interface ImageAnimatorInterface {
- (): ImageAnimatorAttribute;
- }
由源码可知,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;
- }
svg
,png
, jpg
和 webp
。AnimationStatus
定义了以下 4 中状态:
width
、 height
、 top
和 left
属性是无效的。 false 表示每一张图片的 width
、 height
、 top
和 left
属性都要单独设置。FillMode
参数类型说明如下:
简单样例如下所示:
- @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%')
- }
- }
用于显示加载动效的组件。
说明
该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
无
LoadingProgress()
创建加载进展组件。
从API version 9开始,该接口支持在ArkTS卡片中使用。
名称 | 参数类型 | 描述 |
---|---|---|
color | 设置加载进度条前景色。 从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 })
- }
- }
跑马灯组件,用于滚动展示一段单行文本,仅当文本内容宽度超过跑马灯组件宽度时滚动。
使用跑马灯组件我们可以按照自己想要的样式来设定跑马灯
说明
该组件从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%')
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。