diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest 0.png b/LottieSample/screenshots/MotionCorpse-Jrcanest 0.png index 4c0adbc2c9..cbc982623c 100644 Binary files a/LottieSample/screenshots/MotionCorpse-Jrcanest 0.png and b/LottieSample/screenshots/MotionCorpse-Jrcanest 0.png differ diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest 10.png b/LottieSample/screenshots/MotionCorpse-Jrcanest 10.png index e107efa543..1cf749e696 100644 Binary files a/LottieSample/screenshots/MotionCorpse-Jrcanest 10.png and b/LottieSample/screenshots/MotionCorpse-Jrcanest 10.png differ diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest 100.png b/LottieSample/screenshots/MotionCorpse-Jrcanest 100.png index e04c6f9c4f..6eb89c5eaf 100644 Binary files a/LottieSample/screenshots/MotionCorpse-Jrcanest 100.png and b/LottieSample/screenshots/MotionCorpse-Jrcanest 100.png differ diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest 20.png b/LottieSample/screenshots/MotionCorpse-Jrcanest 20.png index 5b444e12b1..fff912a29f 100644 Binary files a/LottieSample/screenshots/MotionCorpse-Jrcanest 20.png and b/LottieSample/screenshots/MotionCorpse-Jrcanest 20.png differ diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest 5.png b/LottieSample/screenshots/MotionCorpse-Jrcanest 5.png index 36de35942e..10b7a76bb3 100644 Binary files a/LottieSample/screenshots/MotionCorpse-Jrcanest 5.png and b/LottieSample/screenshots/MotionCorpse-Jrcanest 5.png differ diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest 50.png b/LottieSample/screenshots/MotionCorpse-Jrcanest 50.png index ac2f5c34b6..f2a7d34918 100644 Binary files a/LottieSample/screenshots/MotionCorpse-Jrcanest 50.png and b/LottieSample/screenshots/MotionCorpse-Jrcanest 50.png differ diff --git a/LottieSample/screenshots/Tests_Hosts 20.png b/LottieSample/screenshots/Tests_Hosts 20.png index d0d09007fa..41d1d613e6 100644 Binary files a/LottieSample/screenshots/Tests_Hosts 20.png and b/LottieSample/screenshots/Tests_Hosts 20.png differ diff --git a/lottie/src/main/java/com/airbnb/lottie/AnimatableShapeValue.java b/lottie/src/main/java/com/airbnb/lottie/AnimatableShapeValue.java index 12fae4402b..42400320c4 100644 --- a/lottie/src/main/java/com/airbnb/lottie/AnimatableShapeValue.java +++ b/lottie/src/main/java/com/airbnb/lottie/AnimatableShapeValue.java @@ -106,6 +106,7 @@ class AnimatableShapeValue extends BaseAnimatableValue { } shape.addCurve(new CubicCurveData(shapeCp1, shapeCp2, vertex)); + shape.setClosed(true); } return shape; diff --git a/lottie/src/main/java/com/airbnb/lottie/MiscUtils.java b/lottie/src/main/java/com/airbnb/lottie/MiscUtils.java index 41c709c5d5..3930c5aab0 100644 --- a/lottie/src/main/java/com/airbnb/lottie/MiscUtils.java +++ b/lottie/src/main/java/com/airbnb/lottie/MiscUtils.java @@ -19,6 +19,9 @@ static void getPathFromData(ShapeData shapeData, Path outPath) { curveData.getControlPoint2().x, curveData.getControlPoint2().y, curveData.getVertex().x, curveData.getVertex().y); } + if (shapeData.isClosed()) { + outPath.close(); + } } static float lerp(float a, float b, @FloatRange(from = 0f, to = 1f) float percentage) { diff --git a/lottie/src/main/java/com/airbnb/lottie/ShapeData.java b/lottie/src/main/java/com/airbnb/lottie/ShapeData.java index 828c09b44a..e4c00c061a 100644 --- a/lottie/src/main/java/com/airbnb/lottie/ShapeData.java +++ b/lottie/src/main/java/com/airbnb/lottie/ShapeData.java @@ -9,6 +9,7 @@ class ShapeData { private final List curves = new ArrayList<>(); private PointF initialPoint; + private boolean closed; void setInitialPoint(PointF initialPoint) { this.initialPoint = initialPoint; @@ -29,6 +30,14 @@ void addCurve(CubicCurveData curve) { curves.add(curve); } + public boolean isClosed() { + return closed; + } + + public void setClosed(boolean closed) { + this.closed = closed; + } + List getCurves() { return curves; } @@ -38,6 +47,8 @@ void interpolateBetween(ShapeData shapeData1, ShapeData shapeData2, if (initialPoint == null) { initialPoint = new PointF(); } + setClosed(shapeData1.isClosed() || shapeData2.isClosed()); + if (!curves.isEmpty() && curves.size() != shapeData1.getCurves().size() && curves.size() != shapeData2.getCurves().size()) { throw new IllegalStateException("Curves must have the same number of control points. This: "