Skip listeners based on keyframes (#1061)
diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java
index 19cf7c2..42c3a7e 100644
--- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java
+++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java
@@ -5,6 +5,7 @@
import com.airbnb.lottie.value.Keyframe;
import com.airbnb.lottie.value.LottieValueCallback;
+import java.security.Key;
import java.util.ArrayList;
import java.util.List;
@@ -52,7 +53,7 @@
public void setProgress(@FloatRange(from = 0f, to = 1f) float progress) {
// Must use hashCode() since the actual object instance will be returned
// from getValue() below with the new values.
- int previousValue = valueCallback == null ? getValue().hashCode() : 0;
+ Keyframe<K> previousKeyframe = getCurrentKeyframe();
if (progress < getStartDelayProgress()) {
progress = getStartDelayProgress();
} else if (progress > getEndProgress()) {
@@ -64,9 +65,9 @@
}
this.progress = progress;
// Just trigger a change but don't compute values if there is a value callback.
- int newValue = valueCallback == null ? getValue().hashCode() : -1;
+ Keyframe<K> newKeyframe = getCurrentKeyframe();
- if (previousValue != newValue) {
+ if (previousKeyframe != newKeyframe || !newKeyframe.isStatic()) {
notifyListeners();
}
}