LottieAnimationView 使用——加载、播放、控制
三种加载方式
val animationView = findViewById<LottieAnimationView>(R.id.animation_view)
// 方式一:从 raw 资源
animationView.setAnimation(R.raw.loading)
// 方式二:从 assets 文件
animationView.setAnimation("loading.json")
// 方式三:远程 URL
animationView.setAnimationFromUrl("你的 CDN 托管地址")
播放控制
// 播放
animationView.playAnimation()
// 暂停
animationView.pauseAnimation()
// 恢复
animationView.resumeAnimation()
// 停止并回到起始帧
animationView.cancelAnimation()
// 跳到指定帧并停止
animationView.frame = 30f
// 跳到指定进度(0~1)
animationView.progress = 0.5f
// 设置循环次数
animationView.repeatCount = LottieDrawable.INFINITE // 或具体次数
animationView.repeatMode = LottieDrawable.RESTART // 或 REVERSE
// 设置倍速
animationView.speed = 1.5f // 正常 1.0f,半速 0.5f
回调监听
animationView.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator) {}
override fun onAnimationEnd(animation: Animator) {
// 单次播放完成
}
override fun onAnimationCancel(animation: Animator) {}
override fun onAnimationRepeat(animation: Animator) {
// 每次循环结束
}
})
// 或者用简化的扩展方法(v3.0+)
animationView.doOnAnimationEnd {
// ...
}
LottieDrawable
LottieDrawable 和 LottieAnimationView 是同一套底层,但更灵活——可以放到任何 View 的 background 或 foreground,或者作为 ImageView 的 drawable:
val drawable = LottieDrawable()
drawable.composition = LottieCompositionFactory.fromRawResSync(this, R.raw.loading).value
drawable.playAnimation()
// 设置为任意 View 的背景
myView.background = drawable
生命周期注意
LottieAnimationView 是一个 View,会随 Activity / Fragment 生命周期自动处理。但如果你在自定义 View 或 RecyclerView 的 ViewHolder 里使用:
- 在
onViewRecycled(ViewHolder)或onDetachedFromWindow(自定义 View)时取消动画。 - 不要让动画在 Fragment 退出后继续播放——会造成 UI 和内存泄漏。
override fun onPause() {
super.onPause()
animationView.cancelAnimation() // 或 pauseAnimation()
}