diff options
| author | 2011-02-11 15:21:35 -0800 | |
|---|---|---|
| committer | 2011-02-11 15:21:35 -0800 | |
| commit | 750e12e18f7ce9654cadf11b9e933afb29b59311 (patch) | |
| tree | 71478eaa32acf708771c8ed4bc908552b2c410e8 | |
| parent | 83a7b963f0070022d98853ea1fb4fa5c81cc5e79 (diff) | |
Fix when >2 keyframes supplied
When there are more than two keyframes, we treat each keyframe
interval as its own separate period during which to calculate animated
values. To do this, we calculate an intervaleFraction from the overall
elapsed fraction of the entire animation. This intervalFraction is then
used to calculate the animated values in that interval.
However, we failed to actually use the intervalFraction in some code
paths, using the overall fraction instead. This caused a jumping behavior
because we were incorrectly calculating the values during the intervals.
Change-Id: Ia052e1e8b5130ff450ee20c0a3581e3de42399e1
| -rw-r--r-- | core/java/android/animation/FloatKeyframeSet.java | 6 | ||||
| -rw-r--r-- | core/java/android/animation/IntKeyframeSet.java | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/core/java/android/animation/FloatKeyframeSet.java b/core/java/android/animation/FloatKeyframeSet.java index 4009f139db73..377b5a054668 100644 --- a/core/java/android/animation/FloatKeyframeSet.java +++ b/core/java/android/animation/FloatKeyframeSet.java @@ -87,7 +87,7 @@ class FloatKeyframeSet extends KeyframeSet { } float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); return mEvaluator == null ? - prevValue + fraction * (nextValue - prevValue) : + prevValue + intervalFraction * (nextValue - prevValue) : ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). floatValue(); } else if (fraction >= 1f) { @@ -103,7 +103,7 @@ class FloatKeyframeSet extends KeyframeSet { } float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); return mEvaluator == null ? - prevValue + fraction * (nextValue - prevValue) : + prevValue + intervalFraction * (nextValue - prevValue) : ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). floatValue(); } @@ -120,7 +120,7 @@ class FloatKeyframeSet extends KeyframeSet { float prevValue = prevKeyframe.getFloatValue(); float nextValue = nextKeyframe.getFloatValue(); return mEvaluator == null ? - prevValue + fraction * (nextValue - prevValue) : + prevValue + intervalFraction * (nextValue - prevValue) : ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). floatValue(); } diff --git a/core/java/android/animation/IntKeyframeSet.java b/core/java/android/animation/IntKeyframeSet.java index 5629c5ef9783..7b7c876ba97b 100644 --- a/core/java/android/animation/IntKeyframeSet.java +++ b/core/java/android/animation/IntKeyframeSet.java @@ -87,7 +87,7 @@ class IntKeyframeSet extends KeyframeSet { } float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); return mEvaluator == null ? - prevValue + (int)(fraction * (nextValue - prevValue)) : + prevValue + (int)(intervalFraction * (nextValue - prevValue)) : ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). intValue(); } else if (fraction >= 1f) { @@ -103,7 +103,7 @@ class IntKeyframeSet extends KeyframeSet { } float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); return mEvaluator == null ? - prevValue + (int)(fraction * (nextValue - prevValue)) : + prevValue + (int)(intervalFraction * (nextValue - prevValue)) : ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)).intValue(); } IntKeyframe prevKeyframe = (IntKeyframe) mKeyframes.get(0); @@ -119,7 +119,7 @@ class IntKeyframeSet extends KeyframeSet { int prevValue = prevKeyframe.getIntValue(); int nextValue = nextKeyframe.getIntValue(); return mEvaluator == null ? - prevValue + (int)(fraction * (nextValue - prevValue)) : + prevValue + (int)(intervalFraction * (nextValue - prevValue)) : ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). intValue(); } |