当前位置: 首页 > article >正文

Lottie加载的一些坑

    Lottie是一个非常强大的动画库,可以渲染一些非常绚丽的动画。然而在使用的过程中,会遇到一些诡异的问题。通常,这不是使用方式上有什么问题,大都是UE产出的lottie本身存在问题。本来之前的UE小哥还不错的,跳槽后来了个UE小姐姐,实在是一言难尽。。。那么,既然UE经常搞事情,我们如何辅助UE去定位lottei的问题呢?本篇记录lottie加载遇到的一些坑或问题。

    之前,我写过一篇非常详细的博客来总结Lottie在Android端的使用,如果是使用lottie,可以参考我这边文章,非常详细https://zhaojun.blog.csdn.net/article/details/115773156https://zhaojun.blog.csdn.net/article/details/115773156       

目录

一、Lottie加载本地zip包的诡异问题

二、iOS单端崩溃问题

三、Android加载不显示问题

四、Android单端崩溃问题


一、Lottie加载本地zip包的诡异问题

    看下面的一个例子,好端端的一个lottie,加载不出来,也没有崩溃走到Exception回调中。于是我添加FailureListener,去看下到底报了什么错。

        private void loadLottieWithLocalZip() {
            try {
                LottieCompositionFactory.fromZipStream(new ZipInputStream(
                        new FileInputStream("/sdcard/test.zip")), null)
                        .addListener(new LottieListener<LottieComposition>() {
                            @Override
                            public void onResult(final LottieComposition lottieComposition) {
                                if (lottieComposition != null) {
                                    mLottieView.setComposition(lottieComposition);
                                    mLottieView.playAnimation();
                                }
                            }
                        })
                        .addFailureListener(new LottieListener<Throwable>() {
                            @Override
                            public void onResult(Throwable result) {
                                Log.d("TTTT", "result:" + result.getMessage());
                            }
                        });
            } catch (Exception e) {
                Log.d("TTTT", "e:" + e.getMessage());
            }
        }

可以看到,走到了Failure回调,异常如下,看上去像是缺少了某个image:

然而对lottie的zip文件解压后,其实里面有img_3.jpg:

因此,并不是缺少了Img_3.jpg这个文件。那接下来如何分析呢?我们查看下lottie里面的data.json文件:

 

图片是jpg,但是下面这个cl是png,不懂lottie的cl字段是啥,怀疑可能有问题:

 

UE小姐姐重新出了一个所谓的"兼容lottie",抱着试了一下,还是加载不出来,一样的报错。咋办?只能去看lottie源码:

1、首先,看下抛出这个异常的代码:

 拿不到这个bitmap,所以抛出了异常。

2、顺着这里往上看:

    找到了,判断png或者webp的,才会加载bitmap,否则给close了。那么,我们基本确定,是因为UE给的lottie包里面的图片有jpg的,而通过zip包加载不支持jpg(不知道lottie为什么有这个限制)。

    于是,我强制把jpg后缀改为png,并修改了data.json里面的jpg,尝试加载,成功了!当然,实际上我们肯定不能这么去修改后缀和json,还是反馈给UE去出一版png的lottie,毕竟在生产lottie这方面人家还是专业的。。

二、iOS单端崩溃问题

    再来看这么一个例子,也是好好的lottie,在Android加载没问题非常完美,但是同事说在iOS直接崩溃了。调试半天发现json的某个layer缺了ind这个属性:

三、Android加载不显示问题

    再来一个例子,UE小姐姐产出的lottie在iOS加载成功了,但是Android没加载出来,也没有crash。然后又开始甩锅给我Android了,直接去看下是不是在json里面直接使用base64编码的图片:

 Android的Lottie不能像上面那么直接使用base64的图片,得使用路径和文件名的形式:

 

四、Android单端崩溃问题

    很早之前遇到过一个lottie,在iOS加载没问题,但是Android稳定的崩溃,通过调试发现是lottie内部使用了iOS的某种字体,而该字体在Android系统不存在。因此,建议UE不要再lottie中使用系统字体。

    以上是lottie使用过程中常遇到的一些诡异问题,如开篇所说,这都是UE做lottie时产生的问题,而RD通过调试可以很快的发现问题。但如果我们把这些问题整理下来,可能不用调试看下文件内容就知道了,希望对你有所帮助。


http://www.kler.cn/a/10241.html

相关文章:

  • 【大数据学习 | kafka高级部分】kafka的kraft集群
  • 【大数据学习 | HBASE高级】region split机制和策略
  • 03WIFI与蓝牙1——基于全志V3S的Linux开发板教程笔记
  • 2024HNCPC G - Utakotoba
  • 一篇文章教会你使用Linux的‘sed‘基础命令
  • 在使用element中的抽屉<el-drawer>页签<el-tabs/>组合时,echarts图表宽度显示异常问题
  • 【OpenCV-Python】cvui 之 trackbar
  • 因果推断14--DRNet论文和代码学习
  • 如果让你做技术负责人,你会怎么设计后端架构?
  • 查看 Elasticsearch 分析器
  • selenium库有哪些功能呢?都是如何实现的呢?
  • ( “树” 之 DFS) 543. 二叉树的直径 ——【Leetcode每日一题】
  • Git的安装与基本使用
  • 2021蓝桥杯真题大写 C语言/C++
  • 计算机网络笔记(横向)
  • 代码随想录算法训练营第三十四天-贪心算法3| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
  • 微服务+springcloud+springcloud alibaba学习笔记【Eureka服务注册中心】(3/9)
  • C++标准库--IO库(Primer C++ 第五版 · 阅读笔记)
  • 离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)
  • 探索树形数据结构,通识树、森林与二叉树的基础知识(专有名词),进一步利用顺序表和链表表示、遍历和线索树形结构
  • 梯度的看法
  • MyBatis配置文件 —— 相关标签详解
  • 干翻Hadoop系列之:Hadoop前瞻之分布式知识
  • Leetcode.1992 找到所有的农场组
  • NumPy 秘籍中文第二版:十、Scikits 的乐趣
  • vue3+TS+Pinia+Vite项目实战之一