blob: 201c3bc281554edf65950099f0ef1d4b38c49980 [file] [log] [blame]
package com.airbnb.lottie.value;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import com.airbnb.lottie.animation.keyframe.BaseKeyframeAnimation;
/**
* Allows you to set a callback on a resolved {@link com.airbnb.lottie.model.KeyPath} to modify
* its animation values at runtime.
*/
public class LottieValueCallback<T> {
private final LottieFrameInfo<T> frameInfo = new LottieFrameInfo<>();
@Nullable private BaseKeyframeAnimation<?, ?> animation;
/**
* This can be set with {@link #setValue(Object)} to use a value instead of deferring
* to the callback.
**/
@Nullable protected T value = null;
public LottieValueCallback() {
}
public LottieValueCallback(@Nullable T staticValue) {
value = staticValue;
}
/**
* Override this if you haven't set a static value in the constructor or with setValue.
* <p>
* Return null to resort to the default value.
*/
@Nullable
public T getValue(LottieFrameInfo<T> frameInfo) {
return value;
}
public final void setValue(@Nullable T value) {
this.value = value;
if (animation != null) {
animation.notifyListeners();
}
}
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Nullable
public final T getValueInternal(
float startFrame,
float endFrame,
T startValue,
T endValue,
float linearKeyframeProgress,
float interpolatedKeyframeProgress,
float overallProgress
) {
return getValue(
frameInfo.set(
startFrame,
endFrame,
startValue,
endValue,
linearKeyframeProgress,
interpolatedKeyframeProgress,
overallProgress
)
);
}
@RestrictTo(RestrictTo.Scope.LIBRARY)
public final void setAnimation(@Nullable BaseKeyframeAnimation<?, ?> animation) {
this.animation = animation;
}
}