public void setProgress(@FloatRange(from = 0f, to = 1f) float progress) {
    if (L.isTraceEnabled()) {
      L.beginSection("BaseKeyframeAnimation#setProgress");
    }
    if (keyframesWrapper.isEmpty()) {
      if (L.isTraceEnabled()) {
        L.endSection("BaseKeyframeAnimation#setProgress");
      }
      return;
    }
    if (progress < getStartDelayProgress()) {
      progress = getStartDelayProgress();
    } else if (progress > getEndProgress()) {
      progress = getEndProgress();
    }

    if (progress == this.progress) {
      if (L.isTraceEnabled()) {
        L.endSection("BaseKeyframeAnimation#setProgress");
      }
      return;
    }
    this.progress = progress;
    if (keyframesWrapper.isValueChanged(progress)) {
      notifyListeners();
    }
    if (L.isTraceEnabled()) {
      L.endSection("BaseKeyframeAnimation#setProgress");
    }
  }
@param <K> Keyframe type
@param <A> Animation type
lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java