目前设计师的AE能导出的动图有GIF和Json两种格式,在安卓项目中,加载一个普通的GIF使用Glide就行,Json格式的动图则需要使用Airbnb开源的Lottie框架,网上随手就能搜到很多关于Lottie的介绍和使用方法,再次就不再赘述了。顺手附上lottie-android的github地址:https://github.com/airbnb/lottie-android 。然而,在实际项目中接入这个框架时,Lottie在github上的一句话引起了我的注意:
意思是2.8.0开始的版本需要项目兼容androidX才能用,如果一个成熟的大项目切换到androidX需要花费的成本过高,你能用的最高版本只能是2.7.0(截止至2020年6月,最新版本是3.4.0),而低版本有一些严重的问题,下面以加载json的url为例,常见问题如下(如果需要加载静态json文件,处理方式也是一样的)。
1.加载json的url错误,网络返回了404就直接闪退了,连异常也无法捕捉
LottieAnimationView在代码中最简单的应用就两句话:
lottieAnimationView.setAnimationFromUrl(url);
lottieAnimationView.playAnimation();
别高兴得太早,试试故意写一个错误的url,立刻就闪退,我们看看源码中能不能找到解决方案
注意这里设置了一个加载失败的回调failureListener,我们来看看它是什么
failureListener是LottieListener类型的,并且是private final的,所以我们不能获取它也不能修改它,而它只抛出了一个异常,所以就直接闪退了,经过尝试,这个异常是不能直接捕捉到的。我在官方的github上看到了有人提到了这个issue,并且留言回复中有人给出了解决方案,关键在于源码的第一句话
setCompositionTask(LottieCompositionFactory.fromUrl(getContext(), url));
这句话给LottieAnimati