我收到了多个应使用Lottie库按顺序播放的动画文件
我目前正在尝试重用相同的LottieAnimationView,并在第一个动画完成时设置下一个动画。代码如下:
private fun playFirstAnimation() {
binding.animation.setAnimation(R.raw.progress_1)
binding.animation.repeatCount = 2
binding.animation.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) = Unit
override fun onAnimationCancel(animation: Animator?) = Unit
override fun onAnimationStart(animation: Animator?) = Unit
override fun onAnimationEnd(animation: Animator?) {
binding.animation.removeAnimatorListener(this)
notifyFirstAnimationFinished()
playSecondAnimation()
}
})
binding.animation.playAnimation()
}
private fun playSecondAnimation() {
binding.animation.setAnimation(R.raw.progress_2)
binding.animation.repeatCount = 0
binding.animation.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) = Unit
override fun onAnimationCancel(animation: Animator?) = Unit
override fun onAnimationStart(animation: Animator?) = Unit
override fun onAnimationEnd(animation: Animator?) {
binding.animation.removeAnimatorListener(this)
notifySecondAnimationFinished()
playThirdAnimation()
}
})
binding.animation.playAnimation()
}
这里的问题(除了难看的代码)是短时间更改动画时出现小的闪烁(动画消失了,动画的位置没有任何显示)。 我无法将所有动画合并为一个,因为我需要知道何时恰好完成一个动画。而且我真的不想为每个动画创建单独的LottieAnimationView并在每次更改时替换它们,因为我可能会有很多动画。
在这种情况下我有什么选择?
答案 0 :(得分:0)
问题在于,动画结束后,您正尝试加载另一个资源到相同的View
,这是一个繁琐的过程,并同时播放动画。一种令人毛骨悚然的解决方案是增加延迟。
lottieView.setAnimation("firstlottie.json");
lottieView.playAnimation();
lottieView.addAnimatorListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
//first animation has ended
lottieView.pauseAnimation();
lottieView.setAnimation("secondlottie.json"); //will show only the first frame
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
lottieView.playAnimation();
}
}, 500);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
答案 1 :(得分:0)
结果证明,有一个解决此问题的简单方法。 除了调用 setAnimation 外,我们还可以调用 setComposition 并从 LottieCompositionFactory.fromRawResSync , LottieCompositionFactory.fromRawRes 或任何其他方法提供预加载的结果其他适合您需求的方法。