diff --git a/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java b/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java index a613b6356b9..1760968c3c3 100644 --- a/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java +++ b/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java @@ -15,6 +15,8 @@ */ package com.google.android.material.progressindicator; +import static com.google.android.material.math.MathUtils.lerp; +import static com.google.android.material.progressindicator.BaseProgressIndicator.HIDE_ESCAPE; import static java.lang.Math.min; import android.graphics.Canvas; @@ -39,6 +41,11 @@ final class CircularDrawingDelegate extends DrawingDelegate= startFraction + ? (endFraction - startFraction) + : (1 + endFraction - startFraction); + startFraction %= 1; + if (totalTrackLengthFraction < 1 && startFraction + arcFraction > 1) { + // Breaks the arc at 0 degree for ESCAPE animation. + fillIndicator(canvas, paint, startFraction, 1, color, drawableAlpha); + fillIndicator(canvas, paint, 1, startFraction + arcFraction, color, drawableAlpha); + return; + } + // Scale start and arc fraction for ESCAPE animation. + startFraction = lerp(1 - totalTrackLengthFraction, 1f, startFraction); + arcFraction = lerp(0f, totalTrackLengthFraction, arcFraction); // Calculates the start and end in degrees. float startDegree = startFraction * 360 * arcDirectionFactor; - float arcDegree = - endFraction >= startFraction - ? (endFraction - startFraction) * 360 * arcDirectionFactor - : (1 + endFraction - startFraction) * 360 * arcDirectionFactor; + float arcDegree = arcFraction * 360 * arcDirectionFactor; // Draws the gaps if needed. if (spec.indicatorTrackGapSize > 0) { diff --git a/lib/java/com/google/android/material/progressindicator/LinearDrawingDelegate.java b/lib/java/com/google/android/material/progressindicator/LinearDrawingDelegate.java index 82754e6b922..c99f16e0384 100644 --- a/lib/java/com/google/android/material/progressindicator/LinearDrawingDelegate.java +++ b/lib/java/com/google/android/material/progressindicator/LinearDrawingDelegate.java @@ -15,6 +15,7 @@ */ package com.google.android.material.progressindicator; +import static com.google.android.material.math.MathUtils.lerp; import static com.google.android.material.progressindicator.BaseProgressIndicator.HIDE_ESCAPE; import static com.google.android.material.progressindicator.BaseProgressIndicator.HIDE_INWARD; import static com.google.android.material.progressindicator.BaseProgressIndicator.SHOW_OUTWARD; @@ -42,6 +43,11 @@ final class LinearDrawingDelegate extends DrawingDelegate