diff options
author | Gabriel Peal <gpeal@users.noreply.github.com> | 2018-09-23 23:17:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-23 23:17:49 -0700 |
commit | 7d95fdf61a0aae87abb7319eeeb504fb0c5b03a0 (patch) | |
tree | af4a969f8334d35686762191871484b752ee521c | |
parent | 56640b09df56270029afd0c5fff6e93b41009815 (diff) | |
download | lottie-7d95fdf61a0aae87abb7319eeeb504fb0c5b03a0.tar.gz |
Allow returning null from value animator callbacks (#960)
Fixes #879
7 files changed, 40 insertions, 18 deletions
diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ColorKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ColorKeyframeAnimation.java index aeb37ff4..54e3d511 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ColorKeyframeAnimation.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ColorKeyframeAnimation.java @@ -1,7 +1,7 @@ package com.airbnb.lottie.animation.keyframe; -import com.airbnb.lottie.value.Keyframe; import com.airbnb.lottie.utils.GammaEvaluator; +import com.airbnb.lottie.value.Keyframe; import java.util.List; @@ -20,8 +20,11 @@ public class ColorKeyframeAnimation extends KeyframeAnimation<Integer> { if (valueCallback != null) { //noinspection ConstantConditions - return valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, startColor, - endColor, keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + Integer value = valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, startColor, + endColor, keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + if (value != null) { + return value; + } } return GammaEvaluator.evaluate(keyframeProgress, startColor, endColor); diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/FloatKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/FloatKeyframeAnimation.java index e1dacfeb..81e58a25 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/FloatKeyframeAnimation.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/FloatKeyframeAnimation.java @@ -18,9 +18,12 @@ public class FloatKeyframeAnimation extends KeyframeAnimation<Float> { if (valueCallback != null) { //noinspection ConstantConditions - return valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, - keyframe.startValue, keyframe.endValue, - keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + Float value = valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, + keyframe.startValue, keyframe.endValue, + keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + if (value != null) { + return value; + } } return MiscUtils.lerp(keyframe.startValue, keyframe.endValue, keyframeProgress); diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation.java index 3730adee..4db3fae2 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation.java @@ -18,9 +18,12 @@ public class IntegerKeyframeAnimation extends KeyframeAnimation<Integer> { if (valueCallback != null) { //noinspection ConstantConditions - return valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, - keyframe.startValue, keyframe.endValue, - keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + Integer value = valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, + keyframe.startValue, keyframe.endValue, + keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + if (value != null) { + return value; + } } return MiscUtils.lerp(keyframe.startValue, keyframe.endValue, keyframeProgress); diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframeAnimation.java index 851ce4b7..2e0acdb7 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframeAnimation.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframeAnimation.java @@ -26,9 +26,12 @@ public class PathKeyframeAnimation extends KeyframeAnimation<PointF> { } if (valueCallback != null) { - return valueCallback.getValueInternal(pathKeyframe.startFrame, pathKeyframe.endFrame, - pathKeyframe.startValue, pathKeyframe.endValue, getLinearCurrentKeyframeProgress(), - keyframeProgress, getProgress()); + PointF value = valueCallback.getValueInternal(pathKeyframe.startFrame, pathKeyframe.endFrame, + pathKeyframe.startValue, pathKeyframe.endValue, getLinearCurrentKeyframeProgress(), + keyframeProgress, getProgress()); + if (value != null) { + return value; + } } if (pathMeasureKeyframe != pathKeyframe) { diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PointKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PointKeyframeAnimation.java index 81fa37f2..9bad6030 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PointKeyframeAnimation.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PointKeyframeAnimation.java @@ -23,8 +23,11 @@ public class PointKeyframeAnimation extends KeyframeAnimation<PointF> { if (valueCallback != null) { //noinspection ConstantConditions - return valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, startPoint, - endPoint, keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + PointF value = valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, startPoint, + endPoint, keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + if (value != null) { + return value; + } } point.set(startPoint.x + keyframeProgress * (endPoint.x - startPoint.x), diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ScaleKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ScaleKeyframeAnimation.java index 2474809b..02a1bbd8 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ScaleKeyframeAnimation.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ScaleKeyframeAnimation.java @@ -20,9 +20,12 @@ public class ScaleKeyframeAnimation extends KeyframeAnimation<ScaleXY> { if (valueCallback != null) { //noinspection ConstantConditions - return valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, - startTransform, endTransform, - keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + ScaleXY value = valueCallback.getValueInternal(keyframe.startFrame, keyframe.endFrame, + startTransform, endTransform, + keyframeProgress, getLinearCurrentKeyframeProgress(), getProgress()); + if (value != null) { + return value; + } } return new ScaleXY( diff --git a/lottie/src/main/java/com/airbnb/lottie/value/LottieValueCallback.java b/lottie/src/main/java/com/airbnb/lottie/value/LottieValueCallback.java index 54ca6048..a30d8f9d 100644 --- a/lottie/src/main/java/com/airbnb/lottie/value/LottieValueCallback.java +++ b/lottie/src/main/java/com/airbnb/lottie/value/LottieValueCallback.java @@ -12,7 +12,7 @@ import com.airbnb.lottie.animation.keyframe.BaseKeyframeAnimation; */ public class LottieValueCallback<T> { private final LottieFrameInfo<T> frameInfo = new LottieFrameInfo<>(); - @Nullable BaseKeyframeAnimation<?, ?> animation; + @Nullable private BaseKeyframeAnimation<?, ?> animation; /** * This can be set with {@link #setValue(Object)} to use a value instead of deferring @@ -29,7 +29,10 @@ public class LottieValueCallback<T> { /** * Override this if you haven't set a static value in the constructor or with setValue. + * + * Return null to resort to the default value. */ + @Nullable public T getValue(LottieFrameInfo<T> frameInfo) { return value; } @@ -42,6 +45,7 @@ public class LottieValueCallback<T> { } @RestrictTo(RestrictTo.Scope.LIBRARY) + @Nullable public final T getValueInternal( float startFrame, float endFrame, |