HarmonyOS lottie框架问题

lottie框架自定义了一个动画,放到了某个界面中,需要一进入就开始加载动画,但是大部分情况下进去界面的时候加载不出来动画,偶尔进去能加载出来。不知道是不是动画还没有初始化好的原因?

import lottie from '@ohos/lottie';
import { AnimationItem } from '@ohos/lottie';
import util from '@ohos.util';
import common from '@ohos.app.ability.common';

@Component
export struct ProgressBar {
  @State message: string = 'progressBar'
  @State viewWidth:number = 40
  @State viewHeight:number = 40
  private renderingSettings: RenderingContextSettings = new RenderingContextSettings(true)
  private canvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.renderingSettings)
  private animateItem: AnimationItem | null = null;
  private mLottieData: object | null = null;
  private animateName: string = "LoadingProgress";

  loadView() {
    if (this.mLottieData != null && this.animateItem == null) {
      let contexts = getContext(this).createModuleContext('commonUi') as common.UIAbilityContext
      this.animateItem = lottie.loadAnimation({
        container: this.canvasRenderingContext,
        renderer: 'canvas', // canvas 渲染模式
        loop: true,
        autoplay: true,
        context: contexts,
        name: this.animateName,
        animationData: this.mLottieData,
      })
    }
  }

  async aboutToAppear() {
    let resStr = util.TextDecoder.create('utf-8', { ignoreBOM: true })
    let context = getContext(this).createModuleContext('commonUi') as common.UIAbilityContext
    context.resourceManager.getRawFileContent('jiazai_slow_data.json', (err: Error, data: Uint8Array) => {
      if (data === null || data === undefined || data.buffer === undefined) {
        return;
      }
      let lottieStr = resStr.decodeWithStream(new Uint8Array(data.buffer));
      this.mLottieData = JSON.parse(lottieStr);
      this.loadView()
    })
  }

  build() {
    Canvas(this.canvasRenderingContext)
      .width(this.viewWidth)
      .height(this.viewHeight)
      .backgroundColor(Color.Transparent)
      .onReady(() => {
        // 可在此生命回调周期中加载动画,可以保证动画尺寸正确
        this.loadView()
      })
      .onDisAppear(() => {
        lottie.destroy(this.animateName);
      })
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
HarmonyOS
2025-01-10 09:09:37
1.1w浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
FengTianYa

加载动画的时机需要注意,点击按钮加载动画可按照正常逻辑放在点击事件内,如果想要实现进入页面自动播放动画,需要结合Canvas组件的onReady()生命回调周期实现,加载动画时机需放置在onReady()生命周期回调内或及之后。同一Canvas组件加载多次/不同动画资源,需要手动销毁动画(lottie.destroy()/animationItem.destroy()),之后才可再次加载其他动画资源。

参考文档:https://gitee.com/openharmony-tpc/lottieArkTS

分享
微博
QQ
微信
回复
2025-01-10 11:18:22
相关问题
HarmonyOS lottie使用问题
1059浏览 • 1回复 待解决
HarmonyOS 关于lottie加载问题
894浏览 • 1回复 待解决
HarmonyOS 首页框架问题
1124浏览 • 1回复 待解决
HarmonyOS lottie动画
837浏览 • 1回复 待解决
HarmonyOS UI测试框架问题
1064浏览 • 1回复 待解决
HarmonyOS Tabs框架切换问题
643浏览 • 1回复 待解决
HarmonyOS Lottie无法全屏加载
829浏览 • 1回复 待解决
HarmonyOS RN使用lottie
644浏览 • 1回复 待解决
HarmonyOS 应用启动框架AppStartup问题
1327浏览 • 1回复 待解决
HarmonyOS视频流缓存框架问题
886浏览 • 1回复 待解决
HarmonyOS 怎样加载Lottie动画
793浏览 • 1回复 待解决
HarmonyOS 如何加载lottie动画
861浏览 • 1回复 待解决
HarmonyOS RN是否适配lottie
638浏览 • 1回复 待解决
HarmonyOS lottie支持url吗?
943浏览 • 1回复 待解决
HarmonyOS 关于Rn框架搭建问题(重要)
1481浏览 • 1回复 待解决
HarmonyOS 本地lottie动画无法播放
1435浏览 • 1回复 待解决
元数据绑定框架使用问题
6975浏览 • 1回复 待解决
HarmonyOS Lottie动画加载不出来
874浏览 • 1回复 待解决
HarmonyOS lottie显示图片不成功
719浏览 • 1回复 待解决