Cancel animations when LottieDrawable is unschedules
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index ca8d13b..8441d44 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -238,6 +238,15 @@
     super.setImageBitmap(bm);
   }
 
+  @Override public void unscheduleDrawable(Drawable who) {
+    if (who == lottieDrawable && lottieDrawable.isAnimating()) {
+      cancelAnimation();
+    } else if (who instanceof LottieDrawable && ((LottieDrawable) who).isAnimating()) {
+      ((LottieDrawable) who).cancelAnimation();
+    }
+    super.unscheduleDrawable(who);
+  }
+
   @Override public void invalidateDrawable(@NonNull Drawable dr) {
     if (getDrawable() == lottieDrawable) {
       // We always want to invalidate the root drawable so it redraws the whole drawable.
diff --git a/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieAnimationViewTest.kt b/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieAnimationViewTest.kt
index a10e4a7..60b31c8 100644
--- a/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieAnimationViewTest.kt
+++ b/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieAnimationViewTest.kt
@@ -16,6 +16,7 @@
 import com.airbnb.lottie.LottieAnimationView
 import com.airbnb.lottie.LottieCompositionFactory
 import com.airbnb.lottie.LottieDrawable
+import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -46,4 +47,19 @@
             assertTrue(view.drawable is LottieDrawable)
         }
     }
+
+    @Test
+    fun testStopsPlayingWhenDrawableSwitched() {
+        class TestFragment : Fragment(R.layout.lottie_activity_main)
+        val scenario = launchFragmentInContainer<TestFragment>()
+        scenario.moveToState(Lifecycle.State.RESUMED)
+        scenario.onFragment { fragment ->
+            val composition = LottieCompositionFactory.fromRawResSync(fragment.requireContext(), R.raw.hamburger_arrow).value!!
+            val view = fragment.requireView().findViewById<LottieAnimationView>(R.id.animation_view)
+            view.setComposition(composition)
+            view.playAnimation()
+            view.setImageDrawable(ColorDrawable(Color.GREEN))
+            assertFalse(view.isAnimating)
+        }
+    }
 }