1.创建空白项目
2.Page文件夹下面新建Spin.ets文件,代码如下:
/**
* TODO SpinKit动画组件 - Pulse 脉冲动画
* author: CSDN—鸿蒙布道师
* since: 2024/05/09
*/
@ComponentV2
export struct SpinFive {
// 参数定义
@Require @Param spinSize: number = 48;
@Require @Param spinColor: ResourceColor = '#209ED8';
// 局部状态
@Local scale1: number = 1;
@Local opacity1: number = 1;
build() {
Canvas()
.width(this.spinSize)
.height(this.spinSize)
.borderRadius(this.spinSize)
.backgroundColor(this.spinColor)
.renderFit(RenderFit.CENTER)
.scale({ x: this.scale1, y: this.scale1 })
.opacity(this.opacity1)
.onAppear(() => {
this.startAnimation();
})
}
/**
* 启动无限循环的关键帧动画
*/
private startAnimation(): void {
const uiContext = this.getUIContext();
if (!uiContext) return;
const keyframes: Array<KeyframeState> = [
{
duration: 0,
curve: Curve.EaseInOut,
event: (): void => {
this.scale1 = 0;
this.opacity1 = 1;
},
},
{
duration: 1000,
curve: Curve.EaseInOut,
event: (): void => {
this.scale1 = 1.0;
this.opacity1 = 0.01;
},
}
];
uiContext.keyframeAnimateTo(
{ iterations: -1, delay: 0 },
keyframes
);
}
}
代码如下:
TypeScript
/**
* TODO SpinKit动画组件 - Pulse 脉冲动画
* author: CSDN---鸿蒙布道师
* since: 2024/05/09
*/
@ComponentV2
export struct SpinFive {
// 参数定义
@Require @Param spinSize: number = 48;
@Require @Param spinColor: ResourceColor = '#209ED8';
// 局部状态
@Local scale1: number = 1;
@Local opacity1: number = 1;
build() {
Canvas()
.width(this.spinSize)
.height(this.spinSize)
.borderRadius(this.spinSize)
.backgroundColor(this.spinColor)
.renderFit(RenderFit.CENTER)
.scale({ x: this.scale1, y: this.scale1 })
.opacity(this.opacity1)
.onAppear(() => {
this.startAnimation();
})
}
/**
* 启动无限循环的关键帧动画
*/
private startAnimation(): void {
const uiContext = this.getUIContext();
if (!uiContext) return;
const keyframes: Array<KeyframeState> = [
{
duration: 0,
curve: Curve.EaseInOut,
event: (): void => {
this.scale1 = 0;
this.opacity1 = 1;
},
},
{
duration: 1000,
curve: Curve.EaseInOut,
event: (): void => {
this.scale1 = 1.0;
this.opacity1 = 0.01;
},
}
];
uiContext.keyframeAnimateTo(
{ iterations: -1, delay: 0 },
keyframes
);
}
}
3.修改Index.ets文件,代码如下:
import { SpinFive } from './Spin';
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Column() {
SpinFive({
spinSize: 60,
spinColor: '#FF0000'
})
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.height('100%')
.width('100%')
}
}
代码如下:
TypeScript
import { SpinFive } from './Spin';
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Column() {
SpinFive({
spinSize: 60,
spinColor: '#FF0000'
})
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.height('100%')
.width('100%')
}
}
4.运行项目,登录华为账号,需进行签名
5.动画效果如下:
