@@ -347,6 +347,7 @@ abstract class BaseSlider<
347
347
private boolean trackIconInactiveEndMutated = false ;
348
348
@ Nullable private ColorStateList trackIconInactiveColor ;
349
349
@ Px private int trackIconSize ;
350
+ @ Px private int trackIconPadding ;
350
351
private int labelPadding ;
351
352
private float touchDownX ;
352
353
private MotionEvent lastEvent ;
@@ -516,6 +517,8 @@ private void loadResources(@NonNull Resources resources) {
516
517
minTickSpacing = resources .getDimensionPixelSize (R .dimen .mtrl_slider_tick_min_spacing );
517
518
518
519
labelPadding = resources .getDimensionPixelSize (R .dimen .mtrl_slider_label_padding );
520
+
521
+ trackIconPadding = resources .getDimensionPixelOffset (R .dimen .m3_slider_track_icon_padding );
519
522
}
520
523
521
524
private void processAttributes (Context context , AttributeSet attrs , int defStyleAttr ) {
@@ -2692,7 +2695,7 @@ private void calculateBoundsAndDrawTrackIcon(
2692
2695
@ Nullable Drawable icon ,
2693
2696
boolean isStart ) {
2694
2697
if (icon != null ) {
2695
- calculateTrackIconBounds (trackBounds , iconRectF , trackIconSize , isStart );
2698
+ calculateTrackIconBounds (trackBounds , iconRectF , trackIconSize , trackIconPadding , isStart );
2696
2699
if (!iconRectF .isEmpty ()) {
2697
2700
drawTrackIcon (canvas , iconRectF , icon );
2698
2701
}
@@ -2712,28 +2715,24 @@ private void drawTrackIcon(
2712
2715
}
2713
2716
2714
2717
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 ()))
2726
2726
? 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 {
2732
2733
// not enough space to draw icon
2733
2734
iconBounds .setEmpty ();
2734
- return ;
2735
2735
}
2736
- iconBounds .set (iconLeft , iconTop , iconRight , iconTop + iconSize );
2737
2736
}
2738
2737
2739
2738
private boolean hasGapBetweenThumbAndTrack () {
0 commit comments