From 8167c115e34e6b206a8446d98ce22c574d8a1584 Mon Sep 17 00:00:00 2001 From: pekingme <8545955+pekingme@users.noreply.github.com> Date: Fri, 19 Jan 2024 22:44:33 +0000 Subject: [PATCH] [ProgressIndicator] Fixed the rounded ends overlapping bug with semi-transparent track/indicator color in Circular default style. Workaround is applied by using the Cap.ROUND when corner radius is half of the track thickness (the case for M3 default Circular style). It doesn't fix the overlap for smaller corner radius with semi-transparent color. PiperOrigin-RevId: 599942498 (cherry picked from commit 97f18a37a43ac4ce784b3bee6ac6b5ab91e3fcae) --- .../progressindicator/BaseProgressIndicator.java | 2 +- .../progressindicator/CircularDrawingDelegate.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/java/com/google/android/material/progressindicator/BaseProgressIndicator.java b/lib/java/com/google/android/material/progressindicator/BaseProgressIndicator.java index f02480a6de9..13351b0ff2d 100644 --- a/lib/java/com/google/android/material/progressindicator/BaseProgressIndicator.java +++ b/lib/java/com/google/android/material/progressindicator/BaseProgressIndicator.java @@ -548,6 +548,7 @@ public int getTrackThickness() { public void setTrackThickness(@Px int trackThickness) { if (spec.trackThickness != trackThickness) { spec.trackThickness = trackThickness; + spec.trackCornerRadius = min(spec.trackCornerRadius, spec.trackThickness / 2); requestLayout(); } } @@ -634,7 +635,6 @@ public int getTrackCornerRadius() { public void setTrackCornerRadius(@Px int trackCornerRadius) { if (spec.trackCornerRadius != trackCornerRadius) { spec.trackCornerRadius = min(trackCornerRadius, spec.trackThickness / 2); - spec.validateSpec(); invalidate(); } } diff --git a/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java b/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java index be838a1e91c..4a89f93371c 100644 --- a/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java +++ b/lib/java/com/google/android/material/progressindicator/CircularDrawingDelegate.java @@ -37,6 +37,8 @@ final class CircularDrawingDelegate extends DrawingDelegate 0 && Math.abs(arcDegree) > 0 && Math.abs(arcDegree) < 360) { + if (!useStrokeCap + && displayedCornerRadius > 0 + && Math.abs(arcDegree) > 0 + && Math.abs(arcDegree) < 360) { paint.setStyle(Style.FILL); drawRoundedEnd(canvas, paint, displayedTrackThickness, displayedCornerRadius, startDegree); drawRoundedEnd(