Separate API for playing/resuming an animation

Fixes #174
diff --git a/LottieSample/src/main/java/com/airbnb/lottie/samples/AnimationFragment.java b/LottieSample/src/main/java/com/airbnb/lottie/samples/AnimationFragment.java
index ca0d1d2..acb6172 100644
--- a/LottieSample/src/main/java/com/airbnb/lottie/samples/AnimationFragment.java
+++ b/LottieSample/src/main/java/com/airbnb/lottie/samples/AnimationFragment.java
@@ -184,7 +184,7 @@
       if (animationView.getProgress() == 1f) {
         animationView.setProgress(0f);
       }
-      animationView.playAnimation();
+      animationView.resumeAnimation();
       postUpdatePlayButtonText();
     }
   }
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index df1d90d..0bc6c36 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -320,10 +320,18 @@
     lottieDrawable.playAnimation();
   }
 
+  public void resumeAnimation() {
+    lottieDrawable.resumeAnimation();
+  }
+
   @SuppressWarnings("unused") public void reverseAnimation() {
     lottieDrawable.reverseAnimation();
   }
 
+  @SuppressWarnings("unused") public void resumeReverseAnimation() {
+    lottieDrawable.resumeReverseAnimation();
+  }
+
   @SuppressWarnings("unused") public void setSpeed(float speed) {
     lottieDrawable.setSpeed(speed);
   }
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index a4b3bb1..581994f 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -226,23 +226,43 @@
     return animator.isRunning();
   }
 
-  void playAnimation() {
+  @SuppressWarnings("WeakerAccess") public void playAnimation() {
+    playAnimation(false);
+  }
+
+  public void resumeAnimation() {
+    playAnimation(true);
+  }
+
+  private void playAnimation(boolean setStartTime) {
     if (layers.isEmpty()) {
       playAnimationWhenLayerAdded = true;
       reverseAnimationWhenLayerAdded = false;
       return;
     }
-    animator.setCurrentPlayTime((long) (getProgress() * animator.getDuration()));
+    if (setStartTime) {
+      animator.setCurrentPlayTime((long) (getProgress() * animator.getDuration()));
+    }
     animator.start();
   }
 
-  void reverseAnimation() {
+  @SuppressWarnings("unused") public void resumeReverseAnimation() {
+    reverseAnimation(true);
+  }
+
+  @SuppressWarnings("WeakerAccess") public void reverseAnimation() {
+    reverseAnimation(false);
+  }
+
+  private void reverseAnimation(boolean setStartTime) {
     if (layers.isEmpty()) {
       playAnimationWhenLayerAdded = false;
       reverseAnimationWhenLayerAdded = true;
       return;
     }
-    animator.setCurrentPlayTime((long) (getProgress() * animator.getDuration()));
+    if (setStartTime) {
+      animator.setCurrentPlayTime((long) (getProgress() * animator.getDuration()));
+    }
     animator.reverse();
   }