Lottie加载的一些坑

news2024/10/6 18:34:54

    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.coloradmin.cn/o/412935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【详解 进程通信】之 System V 共享内存

简介大致操作步骤介绍结果展示key值的获取创建 | 获取共享内存使用共享内存段解除共享内存段销毁共享内存段&#xff08;重点&#xff09;命令行方式销毁共享内存段系统调用销毁共享内存使用共享内存进行进程间通信简介 共享内存可以让多个进程共享同一块内存&#xff0c;也就…

如何实现Chatgpt写文章(附chatgpt3.5免费接口)

申明&#xff1a;本次只是说一下实现思路&#xff0c;官方的接口以及如何实现方式&#xff0c;本文没有提及&#xff0c;这次只是一个思路&#xff0c;若想代替人工完成质量还差的很远&#xff0c;请审核大大放行 今天再次优化了代码&#xff0c;修复了一些bug&#xff0c;考虑…

单片机程序是如何运行起来

多年前在学习计算机原理的时候曾经问过老师一个问题&#xff0c;就是我们编写的程序是怎么在计算机中运行起来的&#xff0c;希望有个完整的思路&#xff0c;现在通过网络收集和整理了这个问题&#xff0c;相当于对这个问题又做了一个认识&#xff0c;有了新的体会。以stm32单片…

Go 语言切片是如何扩容的?

原文链接&#xff1a; Go 语言切片是如何扩容的&#xff1f; 在 Go 语言中&#xff0c;有一个很常用的数据结构&#xff0c;那就是切片&#xff08;Slice&#xff09;。 切片是一个拥有相同类型元素的可变长度的序列&#xff0c;它是基于数组类型做的一层封装。它非常灵活&am…

VCS4 debug with DVE

1、重点讲解&#xff1a; 在verilog源代码中嵌入VCD 系统函数&#xff0c;重点如testbench文件中。VCD文件是VCS产生的仿真波形文件&#xff0c;未经压缩&#xff0c;占用空间较大。VCD是压缩后的波形文件。 编译、仿真以生成VCD文件。 在后处理模式中使用激活DVElog对产生的…

【Javaee】SpringMVC_day01

文章目录1&#xff0c;SpringMVC简介1.1 SpringMVC概述2&#xff0c;SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目&#xff0c;并导入对应的jar包步骤2:创建控制器类步骤3:创建配置类步骤4:创建Tomcat的Servlet容器配置类步骤5:配置Tomcat环境步骤6:启动运行…

JS字符串对象

、 JS字符串对象 1.1 内置对象简介 在 JavaScript 中&#xff0c;对象是非常重要的知识点。对象可以分为两种:一种是“自定义对象”外一种是“内置对象”。自定义对象&#xff0c;指的是需要我们自己定义的对象&#xff0c;和“自定义函数”是一些道理;内置对象&#xff0c;…

力扣刷题笔记26——最小的k个数/快速排序学习/快排与冒泡的时间复杂度

最小的k个数/快速排序学习/快排与冒泡的时间复杂度问题我的代码示例代码快速排序代码问题 来自力扣&#xff1a; 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。示例 …

1672_MIT 6.828 xv6中如何通过构建环境让系统中增加一个可执行调用文件

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面已经分析了如何实现一个系统调用&#xff0c;这个过程的梳理也已经整理成了一份学习笔记。这一次看一下&#xff0c;如何让OS的系统中增加这样的一个可执行的文…

10.网络爬虫—MongoDB详讲与实战

网络爬虫—MongoDB详讲与实战MongoDBMongoDB安装创建数据目录1.数据库操作2.集合操作3.文档操作4.索引操作5.聚合操作6.备份与恢复MongoDB增删改查mongodb集合的增删改查数据插入到表数据的查看删除数据更新数据PyMongo连接数据库第二步 选择需要使用的数据库和集合PyMongo增删…

公司分布式锁加锁错误原因

目录一、问题二、问题复现三、为什么产生这个错误四、解决方案一、问题 第一次设置锁成功, 但是返回false, 后续在循环获取的时候, 因为已经设置成功, 调用setIfAbsent不会返回true, 导致等锁3s失败 private boolean lockWait(String key, long wait, long expire) { long tot…

【CV】Latent diffusion model 扩散模型体验

note 文章目录note一、diffusion模型1.1 Stable Diffusion简介1.2 和GAN对比的优势二、Latent diffusion model原理2.1 潜在空间(Lantent Space)2.2 自动编码器和U-Net2.3 文本编码器三、代码实践3.1 模型权重checkpoints3.2 Stable Diffusion v1模型推理3.3 安装Stable Diffus…

再见了,我的C!

本人的第一篇博客发布于1月份&#xff0c;现在已经4月份了&#xff0c;历时3个月&#xff0c;&#xff0c;已经将C语言涵盖的大多数C语言知识点系统性的整理了出来&#xff0c;在这个期间自己收获了很多&#xff0c;这是C语言的最后一篇文章&#xff0c;接下来我们来回顾一下我…

13.Java面向对象----嵌套类

Java面向对象—嵌套类、内部类、匿名类 一、static静态 在《Java编程思想》有这样一段话&#xff1a;   “static方法就是没有this的方法。在static方法内部不能调用非静态方法&#xff0c;反过来是可以的。而且可以在没有创建任何对象的前提下&#xff0c;仅仅通过类本身来…

计及需求侧响应日前、日内两阶段鲁棒备用优化【IEEE6节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

3.3 二维随机变量条件分布

学习目标&#xff1a; 要学习二维随机变量的条件分布&#xff0c;我可能会采取以下步骤&#xff1a; 复习边缘分布和联合分布&#xff1a;首先需要了解二维随机变量的边缘分布和联合分布的概念以及相应的公式。 复习条件概率&#xff1a;学习条件概率的定义和计算公式&#x…

Java使用elasticjob实现定时任务(v2.1.5)

elastic是一个定时任务库 https://shardingsphere.apache.org/elasticjob/index_zh.html 项目结构 ​依赖 <dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-core</artifactId><version>2.1.5</version>&…

【linux】——进程和计划任务管理

文章目录1.进程 VS 线程1.1 程序和进程的关系1.2 线程1.3 进程和线程的关系2.查看进程2.1 查看进程信息ps2.2 查看进程信息top2.3 查看进程信息pgrep2.4 查看进程树pstree3.控制进程3.1 进程的启动方式3.2 进程的前后台调度3.3 终止进程的运行kill3.4 终止进程的运行pkill4.计划…

【华为OD机试】1039 - 迷宫问题

文章目录一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1&#x1f538;样例2二、代码参考作者&#xff1a;KJ.JK&#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &am…

CASA(Carnegie-Ames-Stanford Approach)模型应用

植被作为陆地生态系统的重要组成部分对于生态环境功能的维持具有关键作用。植被净初级生产力&#xff08;Net Primary Productivity, NPP&#xff09;是指单位面积上绿色植被在单位时间内由光合作用生产的有机质总量扣除自养呼吸的剩余部分。植被NPP是表征陆地生态系统功能及可…