Play, not resume, animation when playAnimation() is called when isShown() is false (#1521)
Fixes #1517
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index fd1c95d..1404f00 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -98,8 +98,11 @@
private boolean isInitialized;
private String animationName;
private @RawRes int animationResId;
+
+ private boolean playAnimationWhenShown = false;
private boolean wasAnimatingWhenNotShown = false;
private boolean wasAnimatingWhenDetached = false;
+
private boolean autoPlay = false;
private boolean cacheComposition = true;
private RenderMode renderMode = RenderMode.AUTOMATIC;
@@ -299,8 +302,11 @@
if (isShown()) {
if (wasAnimatingWhenNotShown) {
resumeAnimation();
- wasAnimatingWhenNotShown = false;
+ } else if (playAnimationWhenShown) {
+ playAnimation();
}
+ wasAnimatingWhenNotShown = false;
+ playAnimationWhenShown = false;
} else {
if (isAnimating()) {
pauseAnimation();
@@ -543,7 +549,7 @@
lottieDrawable.playAnimation();
enableOrDisableHardwareLayer();
} else {
- wasAnimatingWhenNotShown = true;
+ playAnimationWhenShown = true;
}
}
@@ -557,6 +563,7 @@
lottieDrawable.resumeAnimation();
enableOrDisableHardwareLayer();
} else {
+ playAnimationWhenShown = false;
wasAnimatingWhenNotShown = true;
}
}
@@ -895,7 +902,9 @@
@MainThread
public void cancelAnimation() {
+ wasAnimatingWhenDetached = false;
wasAnimatingWhenNotShown = false;
+ playAnimationWhenShown = false;
lottieDrawable.cancelAnimation();
enableOrDisableHardwareLayer();
}
@@ -905,6 +914,7 @@
autoPlay = false;
wasAnimatingWhenDetached = false;
wasAnimatingWhenNotShown = false;
+ playAnimationWhenShown = false;
lottieDrawable.pauseAnimation();
enableOrDisableHardwareLayer();
}