Android平台下如何为Lottie动画提供多张图片资源
在Android平台配置Lottie动画的多张图片资源
嗨,刚好我之前处理过类似的Lottie多图片配置需求,给你分享两种最常用的实现方式,轻松搞定你的问题~
方法一:默认资源路径匹配(最省心)
这个方法完全遵循Lottie JSON里定义的路径结构,不需要额外写代码:
- 首先把你的
data.json放到src/main/assets目录下,建议建个专门的子文件夹归类,比如assets/lottie/(没有assets文件夹就右键main目录新建一个)。 - 然后根据JSON里
assets字段的配置,创建对应的图片路径:JSON里每个资源的u是images/,所以要在assets/lottie/下再建一个images文件夹,把img_0.png和img1_.png放进去,最终路径就是assets/lottie/images/img_0.png和assets/lottie/images/img1_.png。 - 最后在布局或代码里加载动画即可:
布局方式示例
<com.airbnb.lottie.LottieAnimationView android:id="@+id/lottie_animation" android:layout_width="wrap_content" android:layout_height="wrap_content" app:lottie_fileName="lottie/data.json" <!-- 对应assets里的JSON路径 --> app:lottie_autoPlay="true" app:lottie_loop="true" />
代码方式示例
val lottieView = findViewById<LottieAnimationView>(R.id.lottie_animation) lottieView.setAnimation("lottie/data.json") lottieView.playAnimation()
这样Lottie会自动根据JSON里的路径去找到对应的图片,完美适配。
方法二:自定义AssetDelegate(灵活控制图片来源)
如果你的图片不想放在assets的指定路径里(比如想放到drawable目录),或者需要动态替换图片,就用这个方法:
- 先把图片放到
res/drawable目录下(注意文件名尽量用小写字母,避免适配问题)。 - 给LottieAnimationView设置自定义的
AssetDelegate,重写fetchBitmap方法,根据JSON里的图片ID返回对应的Bitmap:
val lottieView = findViewById<LottieAnimationView>(R.id.lottie_animation) lottieView.setAnimation("lottie/data.json") // 设置自定义AssetDelegate lottieView.assetDelegate = object : LottieAssetDelegate() { override fun fetchBitmap(assetId: String): Bitmap? { // 这里的assetId对应JSON里assets数组里的id字段,比如你的"image_0" return when (assetId) { "image_0" -> BitmapFactory.decodeResource(resources, R.drawable.img_0) "image_1" -> BitmapFactory.decodeResource(resources, R.drawable.img1_) else -> super.fetchBitmap(assetId) // 找不到时用默认逻辑 } } } lottieView.playAnimation()
几个关键注意事项
- 文件名大小写敏感:Android的assets目录是区分大小写的,JSON里的图片文件名要和实际文件完全一致,比如JSON里写的是
img_0.png,实际文件不能写成Img_0.png。 - 图片尺寸匹配:尽量保证图片的宽高和JSON里
assets字段定义的w、h一致,避免动画播放时图片拉伸变形。 - 依赖版本:确保你的Lottie依赖是最新稳定版,比如在Module的
build.gradle里:
implementation "com.airbnb.android:lottie:6.4.0" // 版本号可根据实际情况调整
内容的提问来源于stack exchange,提问作者eyeballs
相关产品推荐
相关产品推荐

