blob: 5f1e9e697ac480b0d05c240ccad97b8802a6a928 [file] [log] [blame]
package com.airbnb.lottie;
import android.graphics.Path;
import android.view.animation.Interpolator;
import java.util.List;
class ShapeKeyframeAnimation extends KeyframeAnimation<Path> {
private final Path tempPath = new Path();
private final ShapeData tempShapeData = new ShapeData();
private final List<ShapeData> shapeData;
ShapeKeyframeAnimation(long duration, LottieComposition composition, List<Float> keyTimes,
List<ShapeData> shapeData, List<Interpolator> interpolators) {
super(duration, composition, keyTimes, interpolators);
this.shapeData = shapeData;
}
@Override public Path getValue() {
if (progress <= 0f) {
MiscUtils.getPathFromData(shapeData.get(0), tempPath);
return tempPath;
} else if (progress >= 1f) {
MiscUtils.getPathFromData(shapeData.get(shapeData.size() - 1), tempPath);
return tempPath;
}
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);
}
}
ShapeData startShapeData = shapeData.get(keyframeIndex);
ShapeData endShapeData = shapeData.get(keyframeIndex + 1);
tempShapeData.interpolateBetween(startShapeData, endShapeData, percentageIntoFrame);
MiscUtils.getPathFromData(tempShapeData, tempPath);
return tempPath;
}
}