From 02f03120a974c6ed17b0c7fa5e8e50d42f9b7768 Mon Sep 17 00:00:00 2001 From: Doris Liu Date: Wed, 1 Jun 2016 17:48:15 -0700 Subject: [PATCH] Add additional type check for animating along a path BUG: 29009391 Change-Id: I58c98e64f89d0e4e5e2d800a16e71ef853ecd5f6 --- core/java/android/animation/AnimatorInflater.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/java/android/animation/AnimatorInflater.java b/core/java/android/animation/AnimatorInflater.java index 7d5931fc1cc28..f69bbfd3c53f1 100644 --- a/core/java/android/animation/AnimatorInflater.java +++ b/core/java/android/animation/AnimatorInflater.java @@ -439,8 +439,7 @@ public class AnimatorInflater { } if (arrayObjectAnimator != null) { - setupObjectAnimator(anim, arrayObjectAnimator, valueType == VALUE_TYPE_FLOAT, - pixelSize); + setupObjectAnimator(anim, arrayObjectAnimator, valueType, pixelSize); } } @@ -494,7 +493,7 @@ public class AnimatorInflater { * maximum error for path animations. */ private static void setupObjectAnimator(ValueAnimator anim, TypedArray arrayObjectAnimator, - boolean getFloats, float pixelSize) { + int valueType, float pixelSize) { ObjectAnimator oa = (ObjectAnimator) anim; String pathData = arrayObjectAnimator.getString(R.styleable.PropertyAnimator_pathData); @@ -512,6 +511,11 @@ public class AnimatorInflater { String propertyYName = arrayObjectAnimator.getString(R.styleable.PropertyAnimator_propertyYName); + if (valueType == VALUE_TYPE_PATH || valueType == VALUE_TYPE_UNDEFINED) { + // When pathData is defined, we are in case #2 mentioned above. ValueType can only + // be float type, or int type. Otherwise we fallback to default type. + valueType = VALUE_TYPE_FLOAT; + } if (propertyXName == null && propertyYName == null) { throw new InflateException(arrayObjectAnimator.getPositionDescription() + " propertyXName or propertyYName is needed for PathData"); @@ -521,7 +525,7 @@ public class AnimatorInflater { PathKeyframes keyframeSet = KeyframeSet.ofPath(path, error); Keyframes xKeyframes; Keyframes yKeyframes; - if (getFloats) { + if (valueType == VALUE_TYPE_FLOAT) { xKeyframes = keyframeSet.createXFloatKeyframes(); yKeyframes = keyframeSet.createYFloatKeyframes(); } else {