HarmonyOS 鸿蒙Next 如何利用ArkUI中的Circle组件实现动态半径变化的动画效果?
HarmonyOS 鸿蒙Next 如何利用ArkUI中的Circle组件实现动态半径变化的动画效果?
描述:在开发过程中,我们可能需要实现一个Circle组件的半径随时间动态变化的效果。请问,在ArkUI中,如何编写代码来实现这一动画效果?是否可以利用动画框架或者定时器来实现?
@State radius: number = 50;
// 假设有一个动画框架或定时器来改变radius的值
// 例如:setInterval(() => { this.radius += 1; }, 16);
2 回复
可以结合uiContext的keyframeAnimateTo动画接口和circle的scale属性实现半径动态变化的效果,参考demo如下:
import { UIContext } from '[@kit](/user/kit).ArkUI';
[@Entry](/user/Entry)
[@Component](/user/Component)
export struct CircleDemo {
[@State](/user/State) animationSize: number = 30
uiContext: UIContext | undefined = undefined;
[@State](/user/State) myScale: number = 1;
aboutToAppear(): void {
this.uiContext = this.getUIContext?.();
}
build() {
Column() {
Button('点击').onClick(() => {
if (!this.uiContext) {
return;
}
this.myScale = 1;
this.uiContext.keyframeAnimateTo({ iterations: -1 }, [
{
// 第一段关键帧动画时长为600ms,scale属性做从1到1.5的动画
duration: 2000,
event: () => {
this.myScale = 1.5;
console.log('this.myScale:',this.myScale)
}
},
{
// 第二段关键帧动画时长为600ms,scale属性做从1.5到1的动画
duration: 2000,
event: () => {
this.myScale = 1;
}
}
]);
})
Stack() {
Circle()
.width(100)
.height(100)
.scale({ x: this.myScale, y: this.myScale })
}
}.width('100%').margin({ top: 5 })
}
}