Fixups
diff --git a/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java b/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java index 5dea1ba..8298bce 100644 --- a/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java +++ b/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java
@@ -81,6 +81,8 @@ @Nullable private MaskKeyframeAnimation mask; @Nullable + private FloatKeyframeAnimation inOutAnimation; + @Nullable private BaseLayer matteLayer; /** * This should only be used by {@link #buildParentLayerListIfNeeded()} @@ -145,8 +147,7 @@ private void setupInOutAnimations() { if (!layerModel.getInOutKeyframes().isEmpty()) { - final FloatKeyframeAnimation inOutAnimation = - new FloatKeyframeAnimation(layerModel.getInOutKeyframes()); + inOutAnimation = new FloatKeyframeAnimation(layerModel.getInOutKeyframes()); inOutAnimation.setIsDiscrete(); inOutAnimation.addUpdateListener(new BaseKeyframeAnimation.AnimationListener() { @Override @@ -155,7 +156,6 @@ } }); setVisible(inOutAnimation.getValue() == 1f); - addAnimation(inOutAnimation); } else { setVisible(true); } @@ -524,10 +524,14 @@ if (layerModel.getTimeStretch() != 0) { progress /= layerModel.getTimeStretch(); } + if (inOutAnimation != null) { + // Time stretch needs to be divided again for the inOutAnimation. + inOutAnimation.setProgress(progress / layerModel.getTimeStretch()); + } if (matteLayer != null) { // The matte layer's time stretch is pre-calculated. float matteTimeStretch = matteLayer.layerModel.getTimeStretch(); - matteLayer.setProgress(Math.min(progress * matteTimeStretch, 1f)); + matteLayer.setProgress(progress * matteTimeStretch); } for (int i = 0; i < animations.size(); i++) { animations.get(i).setProgress(progress);