HarmonyOS loading动画加载较慢,用户能明显看到loading动画先不动,后来才正常转起来

​自定义一个loading,发现动画启动比较慢,用户能明显感觉到loading动画先没动,后来才正常转动,请问这个有好的解决方案吗?

代码如下:​

@Component  
export struct LoadingView {  
  
  // 图片旋转角度  
  @Prop  
  @Watch("onLoadingChanged")  
  loading: boolean = false  
  
  // 图片旋转角度  
  @State angel: number = 0  
  
  onLoadingChanged() {  
    if (this.loading) {  
      this.angel = 0  
      this.startLoadingDialogRotate(360)  
    }  
  }  
  
  build() {  
    Image($r("app.media.ic_loading_circle"))  
      .width(30)  
      .height(30)  
      .rotate({  
        centerX: "50%",  
        centerY: "50%",  
        angle: this.angel,  
      })  
      .draggable(false)  
      .visibility(this.loading ? Visibility.Visible : Visibility.None)  
  }  
  
  private startLoadingDialogRotate(animationValue: number) {  
    animateTo({ onFinish: () => {  
      if (this.loading) {  
        this.startLoadingDialogRotate(animationValue + 360)  
      }  
    } }, () => {  
      this.angel = animationValue  
    })  
  }  
  
  aboutToAppear() {  
    // 弹窗显示时,重置角度,否则动画展示有问题  
    this.onLoadingChanged()  
  }  
}
HarmonyOS
2024-10-28 10:34:43
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

​应要求封装成组件

1、组件使用​

import LoadingView from './LoadingView';  
  
@Entry  
@Component  
struct Index {  
  
  @State loading: boolean = false;  
  build() {  
    Column({space: 20}){  
      LoadingView({loading: this.loading})  
      Row({space: 20}){  
        Button('开始').onClick(() =>{  
          this.loading = true;  
        })  
  
        Button('结束').onClick(() =>{  
          this.loading = false;  
        })  
      }  
  
    }  
    .width('100%')  
    .height('100%')  
  }  
}

2、loading组件封装

@Component  
export default struct LoadingView {  
  @Prop loading: boolean = false  
  // 图片旋转角度  
  @State angel: number = 0  
  
  build() {  
    Image($r("app.media.app_icon"))  
      .width(30)  
      .height(30)  
      .rotate({  
        centerX: "50%",  
        centerY: "50%",  
        angle: this.angel,  
      })  
      .draggable(false)  
      .visibility(this.loading ? Visibility.Visible : Visibility.None)  
      .onAppear(() =>{  
        animateTo({  
          curve: Curve.Linear,  
          playMode: PlayMode.Normal,  
          iterations: -1, // 设置-1表示动画无限循环  
          onFinish: () => {  
          }  
        }, () => {  
          this.angel = 360  
        })  
      })  
  }  
}
分享
微博
QQ
微信
回复
2024-10-28 15:11:39
相关问题
HarmonyOS 没有全局的api loading动画
283浏览 • 1回复 待解决
refresh期望能够自定义loading动画
937浏览 • 1回复 待解决
HarmonyOS Loading提示插件问题
493浏览 • 1回复 待解决
动态布局下加载loading效果实现
891浏览 • 1回复 待解决
HarmonyOS 是否有全局loading这种控件?
236浏览 • 1回复 待解决
HarmonyOS 如何在全局使用loading组件?
436浏览 • 1回复 待解决
如何通过Progress实现loading效果?
337浏览 • 1回复 待解决
HarmonyOS 全局loading的菊花如何实现?
207浏览 • 1回复 待解决
LoadingProgress如何修改加载动画样式
1784浏览 • 1回复 待解决
鸿蒙JS开发 接口请求loading??
6272浏览 • 1回复 已解决
HarmonyOS通过方法调用的loading有吗?
313浏览 • 0回复 待解决
lottile动画加载完成回调不调用
932浏览 • 1回复 待解决
鸿蒙JS开发 接口请求loading?
5458浏览 • 1回复 待解决
属性动画如何实现宽高动画效果
1905浏览 • 1回复 待解决
鸿蒙JS开发 蓠接口请求loading?
3665浏览 • 1回复 待解决
如何应用属性动画实现宽高的动画
302浏览 • 1回复 待解决