aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Peal <gpeal@users.noreply.github.com>2018-09-23 23:17:49 -0700
committerGitHub <noreply@github.com>2018-09-23 23:17:49 -0700
commit7d95fdf61a0aae87abb7319eeeb504fb0c5b03a0 (patch)
treeaf4a969f8334d35686762191871484b752ee521c
parent56640b09df56270029afd0c5fff6e93b41009815 (diff)
downloadlottie-7d95fdf61a0aae87abb7319eeeb504fb0c5b03a0.tar.gz
Allow returning null from value animator callbacks (#960)
Fixes #879
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ColorKeyframeAnimation.java9
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/animation/keyframe/FloatKeyframeAnimation.java9
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation.java9
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframeAnimation.java9
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PointKeyframeAnimation.java7
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/animation/keyframe/ScaleKeyframeAnimation.java9
-rw-r--r--lottie/src/main/java/com/airbnb/lottie/value/LottieValueCallback.java6
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,