content: 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;
    }
  }
  