@@ -347,6 +347,7 @@ abstract class BaseSlider<
347347 private boolean trackIconInactiveEndMutated = false ;
348348 @ Nullable private ColorStateList trackIconInactiveColor ;
349349 @ Px private int trackIconSize ;
350+ @ Px private int trackIconPadding ;
350351 private int labelPadding ;
351352 private float touchDownX ;
352353 private MotionEvent lastEvent ;
@@ -516,6 +517,8 @@ private void loadResources(@NonNull Resources resources) {
516517 minTickSpacing = resources .getDimensionPixelSize (R .dimen .mtrl_slider_tick_min_spacing );
517518
518519 labelPadding = resources .getDimensionPixelSize (R .dimen .mtrl_slider_label_padding );
520+
521+ trackIconPadding = resources .getDimensionPixelOffset (R .dimen .m3_slider_track_icon_padding );
519522 }
520523
521524 private void processAttributes (Context context , AttributeSet attrs , int defStyleAttr ) {
@@ -2692,7 +2695,7 @@ private void calculateBoundsAndDrawTrackIcon(
26922695 @ Nullable Drawable icon ,
26932696 boolean isStart ) {
26942697 if (icon != null ) {
2695- calculateTrackIconBounds (trackBounds , iconRectF , trackIconSize , isStart );
2698+ calculateTrackIconBounds (trackBounds , iconRectF , trackIconSize , trackIconPadding , isStart );
26962699 if (!iconRectF .isEmpty ()) {
26972700 drawTrackIcon (canvas , iconRectF , icon );
26982701 }
@@ -2712,28 +2715,24 @@ private void drawTrackIcon(
27122715 }
27132716
27142717 private void calculateTrackIconBounds (
2715- @ NonNull RectF trackBounds , @ NonNull RectF iconBounds , @ Px int iconSize , boolean isStart ) {
2716- float iconPadding = getResources ().getDimension (R .dimen .m3_slider_track_icon_padding );
2717- float iconLeft ;
2718- if (isStart ) {
2719- iconLeft =
2720- isRtl () || isVertical ()
2721- ? trackBounds .right - iconSize - iconPadding
2722- : trackBounds .left + iconPadding ;
2723- } else {
2724- iconLeft =
2725- isRtl () || isVertical ()
2718+ @ NonNull RectF trackBounds ,
2719+ @ NonNull RectF iconBounds ,
2720+ @ Px int iconSize ,
2721+ @ Px int iconPadding ,
2722+ boolean isStart ) {
2723+ if (trackBounds .right - trackBounds .left >= iconSize + 2 * iconPadding ) {
2724+ float iconLeft =
2725+ (isStart ^ (isRtl () || isVertical ()))
27262726 ? trackBounds .left + iconPadding
2727- : trackBounds .right - iconSize - iconPadding ;
2728- }
2729- float iconRight = iconLeft + iconSize ;
2730- int iconTop = calculateTrackCenter () - iconSize / 2 ;
2731- if (trackBounds .left > iconLeft - iconPadding || trackBounds .right < iconRight + iconPadding ) {
2727+ : trackBounds .right - iconPadding - iconSize ;
2728+ float iconTop = calculateTrackCenter () - iconSize / 2f ;
2729+ float iconRight = iconLeft + iconSize ;
2730+ float iconBottom = iconTop + iconSize ;
2731+ iconBounds .set (iconLeft , iconTop , iconRight , iconBottom );
2732+ } else {
27322733 // not enough space to draw icon
27332734 iconBounds .setEmpty ();
2734- return ;
27352735 }
2736- iconBounds .set (iconLeft , iconTop , iconRight , iconTop + iconSize );
27372736 }
27382737
27392738 private boolean hasGapBetweenThumbAndTrack () {
0 commit comments