Skip to content

Commit 54778a9

Browse files
pubiqqpekingme
authored andcommitted
[Slider] Improve track icon bounds calculation
Resolves #4535 GIT_ORIGIN_REV_ID=080a4db213a47dae1e65f6b4edb2235f183599bd PiperOrigin-RevId: 716316682
1 parent 867fd01 commit 54778a9

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

lib/java/com/google/android/material/slider/BaseSlider.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)