diff --git a/LottieSample/screenshots/9squares-AlBoardman.png b/LottieSample/screenshots/9squares-AlBoardman.png index 054342179f..4b75217080 100644 Binary files a/LottieSample/screenshots/9squares-AlBoardman.png and b/LottieSample/screenshots/9squares-AlBoardman.png differ diff --git a/LottieSample/screenshots/LottieLogo1.png b/LottieSample/screenshots/LottieLogo1.png index 8ba72ad9eb..cb6c80a81c 100644 Binary files a/LottieSample/screenshots/LottieLogo1.png and b/LottieSample/screenshots/LottieLogo1.png differ diff --git a/LottieSample/screenshots/LottieLogo2.png b/LottieSample/screenshots/LottieLogo2.png index 499dd78277..e1c77bf5f9 100644 Binary files a/LottieSample/screenshots/LottieLogo2.png and b/LottieSample/screenshots/LottieLogo2.png differ diff --git a/LottieSample/screenshots/PinJump.png b/LottieSample/screenshots/PinJump.png index 80e07d6d13..05c1988c3c 100644 Binary files a/LottieSample/screenshots/PinJump.png and b/LottieSample/screenshots/PinJump.png differ diff --git a/LottieSample/screenshots/Tests_ShapeTypes.png b/LottieSample/screenshots/Tests_ShapeTypes.png index 960710ef46..bf2721c80d 100644 Binary files a/LottieSample/screenshots/Tests_ShapeTypes.png and b/LottieSample/screenshots/Tests_ShapeTypes.png differ diff --git a/LottieSample/screenshots/lottiefiles.com_-_ATM.png b/LottieSample/screenshots/lottiefiles.com_-_ATM.png index 0df4f0cf89..131be92fde 100644 Binary files a/LottieSample/screenshots/lottiefiles.com_-_ATM.png and b/LottieSample/screenshots/lottiefiles.com_-_ATM.png differ diff --git a/LottieSample/screenshots/lottiefiles.com_-_Loading_4.png b/LottieSample/screenshots/lottiefiles.com_-_Loading_4.png index 099d9c97d1..3b8d39e3f6 100644 Binary files a/LottieSample/screenshots/lottiefiles.com_-_Loading_4.png and b/LottieSample/screenshots/lottiefiles.com_-_Loading_4.png differ diff --git a/LottieSample/screenshots/lottiefiles.com_-_Permission.png b/LottieSample/screenshots/lottiefiles.com_-_Permission.png index 81df0b8dfd..48191d1794 100644 Binary files a/LottieSample/screenshots/lottiefiles.com_-_Permission.png and b/LottieSample/screenshots/lottiefiles.com_-_Permission.png differ diff --git a/LottieSample/screenshots/lottiefiles.com_-_Play_and_Like_It.png b/LottieSample/screenshots/lottiefiles.com_-_Play_and_Like_It.png index d7ce537b63..1cc717ba2d 100644 Binary files a/LottieSample/screenshots/lottiefiles.com_-_Play_and_Like_It.png and b/LottieSample/screenshots/lottiefiles.com_-_Play_and_Like_It.png differ diff --git a/LottieSample/screenshots/lottiefiles.com_-_Star_Wars_Rey.png b/LottieSample/screenshots/lottiefiles.com_-_Star_Wars_Rey.png index ccc095aa8b..cbf724574a 100644 Binary files a/LottieSample/screenshots/lottiefiles.com_-_Star_Wars_Rey.png and b/LottieSample/screenshots/lottiefiles.com_-_Star_Wars_Rey.png differ diff --git a/LottieSample/screenshots/same_composition_first_run_PinJump.png b/LottieSample/screenshots/same_composition_first_run_PinJump.png index 80e07d6d13..05c1988c3c 100644 Binary files a/LottieSample/screenshots/same_composition_first_run_PinJump.png and b/LottieSample/screenshots/same_composition_first_run_PinJump.png differ diff --git a/LottieSample/screenshots/same_composition_second_run_PinJump.png b/LottieSample/screenshots/same_composition_second_run_PinJump.png index 80e07d6d13..05c1988c3c 100644 Binary files a/LottieSample/screenshots/same_composition_second_run_PinJump.png and b/LottieSample/screenshots/same_composition_second_run_PinJump.png differ diff --git a/LottieSample/screenshots/test_changing_compositions_PinJump.png b/LottieSample/screenshots/test_changing_compositions_PinJump.png index 80e07d6d13..05c1988c3c 100644 Binary files a/LottieSample/screenshots/test_changing_compositions_PinJump.png and b/LottieSample/screenshots/test_changing_compositions_PinJump.png differ diff --git a/lottie/src/main/java/com/airbnb/lottie/AnimatableTransform.java b/lottie/src/main/java/com/airbnb/lottie/AnimatableTransform.java index 631bf01fdc..971bd5e29e 100644 --- a/lottie/src/main/java/com/airbnb/lottie/AnimatableTransform.java +++ b/lottie/src/main/java/com/airbnb/lottie/AnimatableTransform.java @@ -156,5 +156,4 @@ private static void throwMissingTransform(String missingProperty) { throw new IllegalArgumentException("Missing transform for " + missingProperty); } } - } diff --git a/lottie/src/main/java/com/airbnb/lottie/Keyframe.java b/lottie/src/main/java/com/airbnb/lottie/Keyframe.java index 83fcfa2d85..28ac80aaee 100644 --- a/lottie/src/main/java/com/airbnb/lottie/Keyframe.java +++ b/lottie/src/main/java/com/airbnb/lottie/Keyframe.java @@ -50,6 +50,9 @@ static void setEndFrames(List> keyframes) { @SuppressWarnings("WeakerAccess") final float startFrame; @SuppressWarnings("WeakerAccess") @Nullable Float endFrame; + private float startProgress = Float.MIN_VALUE; + private float endProgress = Float.MIN_VALUE; + public Keyframe(LottieComposition composition, @Nullable T startValue, @Nullable T endValue, @Nullable Interpolator interpolator, float startFrame, @Nullable Float endFrame) { this.composition = composition; @@ -60,15 +63,25 @@ public Keyframe(LottieComposition composition, @Nullable T startValue, @Nullable this.endFrame = endFrame; } - @FloatRange(from = 0f, to = 1f) float getStartProgress() { - return startFrame / composition.getDurationFrames(); + if (startProgress == Float.MIN_VALUE) { + startProgress = (startFrame - composition.getStartFrame()) / composition.getDurationFrames(); + } + return startProgress; } - @FloatRange(from = 0f, to = 1f) float getEndProgress() { - //noinspection Range - return endFrame == null ? 1f : endFrame / composition.getDurationFrames(); + if (endProgress == Float.MIN_VALUE) { + if (endFrame == null) { + endProgress = 1f; + } else { + float startProgress = getStartProgress(); + float durationFrames = endFrame - startFrame; + float durationProgress = durationFrames / composition.getDurationFrames(); + endProgress = startProgress + durationProgress; + } + } + return endProgress; } boolean isStatic() { diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieComposition.java b/lottie/src/main/java/com/airbnb/lottie/LottieComposition.java index a12b41b435..2747456208 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieComposition.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieComposition.java @@ -94,7 +94,7 @@ Layer layerModelForId(long id) { @SuppressWarnings("WeakerAccess") public long getDuration() { long frameDuration = endFrame - startFrame; - return (long) (frameDuration / (float) frameRate * 1000); + return (long) (frameDuration / frameRate * 1000); } int getMajorVersion() { @@ -109,6 +109,10 @@ int getPatchVersion() { return patchVersion; } + long getStartFrame() { + return startFrame; + } + long getEndFrame() { return endFrame; } @@ -139,7 +143,7 @@ Map getImages() { } float getDurationFrames() { - return getDuration() * (float) frameRate / 1000f; + return getDuration() * frameRate / 1000f; }