summaryrefslogtreecommitdiffstats
path: root/core/java/android/animation
diff options
context:
space:
mode:
authorDoris Liu <tianliu@google.com>2015-04-21 18:27:26 -0700
committerDoris Liu <tianliu@google.com>2015-04-22 14:50:17 -0700
commita01fbf35de21cd595d4cda2e83b67c1238e12550 (patch)
treef61a3e06157fa89ce7010c1f1082751594c0bf35 /core/java/android/animation
parent217f93a1296ce2f69ae9c0867b0fb60238256105 (diff)
downloadframeworks_base-a01fbf35de21cd595d4cda2e83b67c1238e12550.zip
frameworks_base-a01fbf35de21cd595d4cda2e83b67c1238e12550.tar.gz
frameworks_base-a01fbf35de21cd595d4cda2e83b67c1238e12550.tar.bz2
Infer value type for keyframes when it is undefined
Bug: 20140483 Change-Id: Idf6caea2a8eae803e33dd34b9c8f563ad12e1848
Diffstat (limited to 'core/java/android/animation')
-rw-r--r--core/java/android/animation/AnimatorInflater.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/core/java/android/animation/AnimatorInflater.java b/core/java/android/animation/AnimatorInflater.java
index 224e8e9..e47d017 100644
--- a/core/java/android/animation/AnimatorInflater.java
+++ b/core/java/android/animation/AnimatorInflater.java
@@ -790,6 +790,31 @@ public class AnimatorInflater {
return valuesArray;
}
+ // When no value type is provided in keyframe, we need to infer the type from the value. i.e.
+ // if value is defined in the style of a color value, then the color type is returned.
+ // Otherwise, default float type is returned.
+ private static int inferValueTypeOfKeyframe(Resources res, Theme theme, AttributeSet attrs) {
+ int valueType;
+ TypedArray a;
+ if (theme != null) {
+ a = theme.obtainStyledAttributes(attrs, R.styleable.Keyframe, 0, 0);
+ } else {
+ a = res.obtainAttributes(attrs, R.styleable.Keyframe);
+ }
+
+ TypedValue keyframeValue = a.peekValue(R.styleable.Keyframe_value);
+ boolean hasValue = (keyframeValue != null);
+ // When no value type is provided, check whether it's a color type first.
+ // If not, fall back to default value type (i.e. float type).
+ if (hasValue && isColorType(keyframeValue.type)) {
+ valueType = VALUE_TYPE_COLOR;
+ } else {
+ valueType = VALUE_TYPE_FLOAT;
+ }
+ a.recycle();
+ return valueType;
+ }
+
private static void dumpKeyframes(Object[] keyframes, String header) {
if (keyframes == null || keyframes.length == 0) {
return;
@@ -817,6 +842,9 @@ public class AnimatorInflater {
type != XmlPullParser.END_DOCUMENT) {
String name = parser.getName();
if (name.equals("keyframe")) {
+ if (valueType == VALUE_TYPE_UNDEFINED) {
+ valueType = inferValueTypeOfKeyframe(res, theme, Xml.asAttributeSet(parser));
+ }
Keyframe keyframe = loadKeyframe(res, theme, Xml.asAttributeSet(parser), valueType);
if (keyframe != null) {
if (keyframes == null) {