大家好,感谢邀请,今天来为大家分享一下卡通电影网站源码分享的问题,以及和电影卡通卡的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
作者|负了时光不负卿
地址|http://www.jianshu.com/p/89c64253fd77
声明|本文是负了时光不负卿原创,已获授权发布,未经原作者允许请勿转载
入坑背景
由于从事直播软件开发的缘故,本猿在版本迭代过程中一期不落的接触到各式各样动画效果。最早的时候,苦逼的用Android原生动画做直播间全屏礼物,反复的看着美工给的Flash效果图,不断的拼凑素材图片,调整控制动画播放的属性值,各个动画代码都很类似,但却无法套用,一连两三天下来,基本上脑海中除了动画就一片空白
踩坑准备
熟悉一个新的框架最快的方式就是查看官方文档,因为官方文档中一般都会给出一个Demo,果不其然,Lottie也是!文档的阅读量不是很大,通篇下来介绍了:
播放本地Assets目录下的Json动画文件
通过Json数据播放动画
如何对动画进行监听以及动画进度调节
Lottie动画数据的预加载和缓存
为Assets目录下的Json动画文件配置动画所需要的素材
开始入坑
然而,他介绍了这么多,并没有一款适合我的。因为服务器下发不是简单的Json数据,是一个动画压缩包,里面包括了动画文件和播放动画需要的素材文件,而且解压后的文件也不在Asset目录下。于是,只好跟踪animationView.setAnimation(“hello-world.json”)源码,看看最终到底做了什么事!
一个参数调用两个参数同名方法,只好接着往下看!
从这里可以看到官方文档中说的缓存,包括强引用缓存,弱引用缓存,和无缓存模式,而且知道Json动画文件最终会转化为Composition对象,而Compostion对象是通过LottieComposition
看到这里我们这就明白,当初传入的文件名,最终还是通过getAssets().open(fileName)的方法,以流的方式进行处理了,于是我们可以这样加载放在其他目录下的Json动画文件。
异步的方式获取Composition对象,因为不使用setAnimation(finalStringanimationName,finalCacheStrategycacheStrategy)方法,所以我们没法使用框架提供的缓存,为了下次播放时不需要重新解析动画文件,使动画的加载速度更快,我们也需要重新做一套缓冲处理,如下
完成了Json动画文件的加载,接下来就是播放动画。正如源码方法中setAnimation(finalStringanimationName,finalCacheStrategycacheStrategy)一样,我们也需要对LottieAnimationView进行setComposition(composition)处理,然后调用LottieAnimationView.playAnimation()就可以进行动画播放了,于是我这样做了:
想想这个需求马上就要搞定,于是我抿抿嘴偷偷笑了,这也太轻松了吧!于是端起茶杯去接了杯水,并运行了项目,准备回来看到那绚丽的动画。然而,事与愿违,等待我的是一片血红的“大姨妈”。
看到这个错误,想起官方文档上面有说,如何为动画配置播放动画所需要的素材,而且错误提示也特别的明显,看了看给的资源包的目录,似乎发现了什么!于是我按照官方《为Assets目录下的Json动画文件设置播放动画所需要的资源》一样,改了一下代码:
实用总结
播放放置在Asset目录下的动画文件
设置播放文件:setAnimation(“文件名”)
如果动画文件带素材:setImageAssetsFolder(“文件夹名”)
播放系统目录下的动画文件
异步获取Compostion对象:LottieComposition.Factory.fromInputStream()
设置播放的素材:setComposition(composition)
如果动画文件带素材:setImageAssetsFolder(“文件夹名”)+setImageAssetDelegate(imageAssetDelegate)
好了,文章到此结束,希望可以帮助到大家。