blob: 15612e8567e20d3794f09fabf17e8967defe5781 [file] [log] [blame]
package com.airbnb.lottie;
import android.animation.ArgbEvaluator;
import android.view.animation.Interpolator;
import java.util.List;
class ColorKeyframeAnimation extends KeyframeAnimation<Integer> {
private final ArgbEvaluator argbEvaluator = new ArgbEvaluator();
private final List<Integer> values;
ColorKeyframeAnimation(long duration, LottieComposition composition, List<Float> keyTimes,
List<Integer> values, List<Interpolator> interpolators) {
super(duration, composition, keyTimes, interpolators);
if (keyTimes.size() != values.size()) {
throw new IllegalArgumentException(
"Key times and values must be the same length " + keyTimes.size() + " vs " +
values.size());
}
this.values = values;
}
@Override public Integer getValue() {
if (progress <= 0f) {
return values.get(0);
} else if (progress >= 1f) {
return values.get(values.size() - 1);
}
int keyframeIndex = getKeyframeIndex();
float startKeytime = keyTimes.get(keyframeIndex);
float endKeytime = keyTimes.get(keyframeIndex + 1);
float percentageIntoFrame = 0;
if (!isDiscrete) {
percentageIntoFrame = (progress - startKeytime) / (endKeytime - startKeytime);
if (interpolators != null) {
percentageIntoFrame =
interpolators.get(keyframeIndex).getInterpolation(percentageIntoFrame);
}
}
int startColor = values.get(keyframeIndex);
int endColor = values.get(keyframeIndex + 1);
return (Integer) argbEvaluator.evaluate(percentageIntoFrame, startColor, endColor);
}
}