From 5450fea31c772687203657b010cf228feb1686f6 Mon Sep 17 00:00:00 2001 From: pubiqq Date: Thu, 6 Mar 2025 03:53:26 +0300 Subject: [PATCH] [LoadingIndicator] Fix handling of negative morphFraction --- .../loadingindicator/LoadingIndicatorDrawingDelegate.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/java/com/google/android/material/loadingindicator/LoadingIndicatorDrawingDelegate.java b/lib/java/com/google/android/material/loadingindicator/LoadingIndicatorDrawingDelegate.java index e27e3e61d12..6b6761148ec 100644 --- a/lib/java/com/google/android/material/loadingindicator/LoadingIndicatorDrawingDelegate.java +++ b/lib/java/com/google/android/material/loadingindicator/LoadingIndicatorDrawingDelegate.java @@ -32,6 +32,7 @@ import androidx.graphics.shapes.RoundedPolygon; import androidx.graphics.shapes.Shapes_androidKt; import com.google.android.material.color.MaterialColors; +import com.google.android.material.math.MathUtils; import com.google.android.material.shape.MaterialShapes; class LoadingIndicatorDrawingDelegate { @@ -116,9 +117,10 @@ void drawIndicator( canvas.rotate(indicatorState.rotationDegree); // Draws the shape morph. indicatorPath.rewind(); + int shapeMorphFraction = (int) Math.floor(indicatorState.morphFraction); int fractionAmongAllShapes = - (int) (indicatorState.morphFraction % INDETERMINATE_MORPH_SEQUENCE.length); - float fractionPerShape = indicatorState.morphFraction % 1; + MathUtils.floorMod(shapeMorphFraction, INDETERMINATE_MORPH_SEQUENCE.length); + float fractionPerShape = indicatorState.morphFraction - shapeMorphFraction; Shapes_androidKt.toPath( INDETERMINATE_MORPH_SEQUENCE[fractionAmongAllShapes], fractionPerShape, indicatorPath); // We need to apply the scaling to the path directly, instead of on the canvas, to avoid the