blob: cb5bef4910139065728bdfa7c6052603b7e1ac0c [file] [log] [blame]
package com.airbnb.lottie;
import android.graphics.Matrix;
import android.graphics.PointF;
class TransformKeyframeAnimation {
private final Matrix matrix = new Matrix();
private final BaseKeyframeAnimation<?, PointF> anchorPoint;
private final BaseKeyframeAnimation<?, PointF> position;
private final BaseKeyframeAnimation<?, ScaleXY> scale;
private final BaseKeyframeAnimation<?, Float> rotation;
private final BaseKeyframeAnimation<?, Integer> opacity;
TransformKeyframeAnimation(AnimatableTransform animatableTransform) {
anchorPoint = animatableTransform.getAnchorPoint().createAnimation();
position = animatableTransform.getPosition().createAnimation();
scale = animatableTransform.getScale().createAnimation();
rotation = animatableTransform.getRotation().createAnimation();
opacity = animatableTransform.getOpacity().createAnimation();
}
void addAnimationsToLayer(BaseLayer layer) {
layer.addAnimation(anchorPoint);
layer.addAnimation(position);
layer.addAnimation(scale);
layer.addAnimation(rotation);
layer.addAnimation(opacity);
}
void addListener(final BaseKeyframeAnimation.AnimationListener listener) {
anchorPoint.addUpdateListener(listener);
position.addUpdateListener(listener);
scale.addUpdateListener(listener);
rotation.addUpdateListener(listener);
opacity.addUpdateListener(listener);
}
BaseKeyframeAnimation<?, Integer> getOpacity() {
return opacity;
}
Matrix getMatrix() {
matrix.reset();
PointF position = this.position.getValue();
if (position.x != 0 || position.y != 0) {
matrix.preTranslate(position.x, position.y);
}
float rotation = this.rotation.getValue();
if (rotation != 0f) {
matrix.preRotate(rotation);
}
ScaleXY scaleTransform = this.scale.getValue();
if (scaleTransform.getScaleX() != 1f || scaleTransform.getScaleY() != 1f) {
matrix.preScale(scaleTransform.getScaleX(), scaleTransform.getScaleY());
}
PointF anchorPoint = this.anchorPoint.getValue();
if (anchorPoint.x != 0 || anchorPoint.y != 0) {
matrix.preTranslate(-anchorPoint.x, -anchorPoint.y);
}
return matrix;
}
}