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);
      })
  }
}
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

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

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

分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS lottie使用问题
535浏览 • 1回复 待解决
HarmonyOS 关于lottie加载问题
28浏览 • 1回复 待解决
HarmonyOS 首页框架问题
501浏览 • 1回复 待解决
HarmonyOS lottie动画
164浏览 • 1回复 待解决
HarmonyOS UI测试框架问题
291浏览 • 1回复 待解决
HarmonyOS Tabs框架切换问题
146浏览 • 1回复 待解决
HarmonyOS RN使用lottie
115浏览 • 1回复 待解决
HarmonyOS Lottie无法全屏加载
179浏览 • 1回复 待解决
HarmonyOS视频流缓存框架问题
514浏览 • 1回复 待解决
HarmonyOS 应用启动框架AppStartup问题
242浏览 • 1回复 待解决
HarmonyOS RN是否适配lottie
113浏览 • 1回复 待解决
HarmonyOS lottie支持url吗?
421浏览 • 1回复 待解决
HarmonyOS 怎样加载Lottie动画
259浏览 • 1回复 待解决
HarmonyOS 如何加载lottie动画
224浏览 • 1回复 待解决
HarmonyOS 关于Rn框架搭建问题(重要)
301浏览 • 1回复 待解决
HarmonyOS 本地lottie动画无法播放
750浏览 • 1回复 待解决
元数据绑定框架使用问题
6188浏览 • 1回复 待解决
HarmonyOS Lottie动画加载不出来
183浏览 • 1回复 待解决
HarmonyOS lottie显示图片不成功
27浏览 • 1回复 待解决