content: package com.airbnb.lottie.value;
  
  import androidx.annotation.NonNull;
  
  import com.airbnb.lottie.utils.MiscUtils;
  
  /**
   * {@link LottieValueCallback} that provides a value offset from the original animation
   * rather than an absolute value.
   */
  @SuppressWarnings({"WeakerAccess", "unused"})
  public class LottieRelativeFloatValueCallback extends LottieValueCallback<Float> {
  
    public LottieRelativeFloatValueCallback() {
    }
  
    public LottieRelativeFloatValueCallback(@NonNull Float staticValue) {
      super(staticValue);
    }
  
    @Override
    public Float getValue(LottieFrameInfo<Float> frameInfo) {
      float originalValue = MiscUtils.lerp(
          frameInfo.getStartValue(),
          frameInfo.getEndValue(),
          frameInfo.getInterpolatedKeyframeProgress()
      );
      float offset = getOffset(frameInfo);
      return originalValue + offset;
    }
  
    public Float getOffset(LottieFrameInfo<Float> frameInfo) {
      if (value == null) {
        throw new IllegalArgumentException("You must provide a static value in the constructor " +
            ", call setValue, or override getValue.");
      }
      return value;
    }
  }
  