OSDN Git Service

ViewPropAnimRT fixes
authorJohn Reck <jreck@google.com>
Tue, 1 Jul 2014 15:34:47 +0000 (08:34 -0700)
committerJohn Reck <jreck@google.com>
Tue, 1 Jul 2014 16:39:54 +0000 (09:39 -0700)
 * Fixes NPE in isNativeInterpolator
 * Fixes null interpolator to mean LinearInterpolator instead of
   the default interpolator which is AccelerateDecelerateInterpolator

 Bug: 15991759

Change-Id: I66ff27154de1e227a07daaebc0519ee3cc0dd38f

core/java/android/view/ViewPropertyAnimator.java
core/java/android/view/ViewPropertyAnimatorRT.java

index 3f72b4c..4ca5863 100644 (file)
@@ -338,7 +338,8 @@ public class ViewPropertyAnimator {
      * By default, the animator uses the default interpolator for ValueAnimator. Calling this method
      * will cause the declared object to be used instead.
      * 
-     * @param interpolator The TimeInterpolator to be used for ensuing property animations.
+     * @param interpolator The TimeInterpolator to be used for ensuing property animations. A value
+     * of <code>null</code> will result in linear interpolation.
      * @return This object, allowing calls to methods in this class to be chained.
      */
     public ViewPropertyAnimator setInterpolator(TimeInterpolator interpolator) {
index 8b4277a..31b360c 100644 (file)
@@ -18,6 +18,8 @@ package android.view;
 
 import android.animation.TimeInterpolator;
 import android.view.ViewPropertyAnimator.NameValuesHolder;
+import android.view.animation.Interpolator;
+import android.view.animation.LinearInterpolator;
 
 import com.android.internal.view.animation.FallbackLUTInterpolator;
 
@@ -29,6 +31,8 @@ import java.util.ArrayList;
  */
 class ViewPropertyAnimatorRT {
 
+    private static final Interpolator sLinearInterpolator = new LinearInterpolator();
+
     private final View mView;
 
     private RenderNodeAnimator mAnimators[] = new RenderNodeAnimator[RenderNodeAnimator.LAST_VALUE + 1];
@@ -65,6 +69,10 @@ class ViewPropertyAnimatorRT {
         long startDelay = parent.getStartDelay();
         long duration = parent.getDuration();
         TimeInterpolator interpolator = parent.getInterpolator();
+        if (interpolator == null) {
+            // Documented to be LinearInterpolator in ValueAnimator.setInterpolator
+            interpolator = sLinearInterpolator;
+        }
         if (!RenderNodeAnimator.isNativeInterpolator(interpolator)) {
             interpolator = new FallbackLUTInterpolator(interpolator, duration);
         }