summaryrefslogtreecommitdiffstats
path: root/core/java/android/animation/FloatKeyframeSet.java
diff options
context:
space:
mode:
authorDoris Liu <tianliu@google.com>2015-03-30 16:03:59 -0700
committerDoris Liu <tianliu@google.com>2015-03-30 16:11:53 -0700
commit6df99053ebd6d32ed1c0e83516b480a6843770c3 (patch)
treea75700a4b2befaa4a57fea15e62cad4f3bb22500 /core/java/android/animation/FloatKeyframeSet.java
parent1c6bfd69442e91458bb5c10490d0cff579f47e06 (diff)
downloadframeworks_base-6df99053ebd6d32ed1c0e83516b480a6843770c3.zip
frameworks_base-6df99053ebd6d32ed1c0e83516b480a6843770c3.tar.gz
frameworks_base-6df99053ebd6d32ed1c0e83516b480a6843770c3.tar.bz2
Fix per-keyframe interpolators
Support different interpolators on every keyframe by running interpolators on proportional duration instead of raw fraction. Bug: 19928396 Change-Id: Ifb8c3a3b56785582cd6b0121d7bfb44534866300
Diffstat (limited to 'core/java/android/animation/FloatKeyframeSet.java')
-rw-r--r--core/java/android/animation/FloatKeyframeSet.java7
1 files changed, 4 insertions, 3 deletions
diff --git a/core/java/android/animation/FloatKeyframeSet.java b/core/java/android/animation/FloatKeyframeSet.java
index 56da940..0173079 100644
--- a/core/java/android/animation/FloatKeyframeSet.java
+++ b/core/java/android/animation/FloatKeyframeSet.java
@@ -118,13 +118,14 @@ class FloatKeyframeSet extends KeyframeSet implements Keyframes.FloatKeyframes {
FloatKeyframe nextKeyframe = (FloatKeyframe) mKeyframes.get(i);
if (fraction < nextKeyframe.getFraction()) {
final TimeInterpolator interpolator = nextKeyframe.getInterpolator();
- if (interpolator != null) {
- fraction = interpolator.getInterpolation(fraction);
- }
float intervalFraction = (fraction - prevKeyframe.getFraction()) /
(nextKeyframe.getFraction() - prevKeyframe.getFraction());
float prevValue = prevKeyframe.getFloatValue();
float nextValue = nextKeyframe.getFloatValue();
+ // Apply interpolator on the proportional duration.
+ if (interpolator != null) {
+ intervalFraction = interpolator.getInterpolation(intervalFraction);
+ }
return mEvaluator == null ?
prevValue + intervalFraction * (nextValue - prevValue) :
((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)).