Skip to content

Commit 7bbbe39

Browse files
minwang1leticiarossi
authored andcommitted
[Slider] Added API for setting the radius of active/inactive tick in xml and Java.
Resolves #2994 Resolves #1920 GIT_ORIGIN_REV_ID=7bf15fb545496cb8e63f8b6ecf653229b1f203f8 PiperOrigin-RevId: 492557754
1 parent 40c8b5c commit 7bbbe39

File tree

6 files changed

+84
-9
lines changed

6 files changed

+84
-9
lines changed

docs/components/Slider.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,12 +333,14 @@ Element | Attribute | Related method(s)
333333

334334
#### Tick mark attributes
335335

336-
Element | Attribute | Related method(s) | Default value
337-
----------------------------------- | ----------------------- | ------------------------------------------------------- | -------------
338-
**Color** | `app:tickColor` | `setTickTintList`<br/>`getTickTintList` | `null`
339-
**Color for track's active part** | `app:tickColorActive` | `setTickActiveTintList`<br/>`getTickActiveTintList` | `?attr/colorSurfaceVariant`
340-
**Color for track's inactive part** | `app:tickColorInactive` | `setTickInactiveTintList`<br/>`getTickInactiveTintList` | `?attr/colorPrimary`
341-
**Tick visible** | `app:tickVisible` | `setTickVisible`<br/>`isTickVisible()` | `true`
336+
Element | Attribute | Related method(s) | Default value
337+
----------------------------------- | ------------------------ | ------------------------------------------------------- | -------------
338+
**Color** | `app:tickColor` | `setTickTintList`<br/>`getTickTintList` | `null`
339+
**Color for tick's active part** | `app:tickColorActive` | `setTickActiveTintList`<br/>`getTickActiveTintList` | `?attr/colorSurfaceVariant`
340+
**Color for tick's inactive part** | `app:tickColorInactive` | `setTickInactiveTintList`<br/>`getTickInactiveTintList` | `?attr/colorPrimary`
341+
**Radius for tick's active part** | `app:tickRadiusActive` | `setTickActiveRadius`<br/>`getTickActiveRadius` | `1dp`
342+
**Radius for tick's inactive part** | `app:tickRadiusInactive` | `setTickInactiveRadius`<br/>`getTickInactiveRadius` | `1dp`
343+
**Tick visible** | `app:tickVisible` | `setTickVisible`<br/>`isTickVisible()` | `true`
342344

343345
**Note:** `app:tickColor` takes precedence over `app:tickColorActive` and
344346
`app:tickColorInative`. It's a shorthand for setting both values to the same

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

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,8 @@ abstract class BaseSlider<
270270
private int minTrackSidePadding;
271271
private int defaultThumbRadius;
272272
private int defaultTrackHeight;
273+
private int defaultTickActiveRadius;
274+
private int defaultTickInactiveRadius;
273275

274276
@Dimension(unit = Dimension.PX)
275277
private int minTouchTargetSize;
@@ -298,6 +300,8 @@ abstract class BaseSlider<
298300
private float stepSize = 0.0f;
299301
private float[] ticksCoordinates;
300302
private boolean tickVisible = true;
303+
private int tickActiveRadius;
304+
private int tickInactiveRadius;
301305
private int trackWidth;
302306
private boolean forceDrawCompatHalo;
303307
private boolean isLongPress = false;
@@ -403,6 +407,9 @@ private void loadResources(@NonNull Resources resources) {
403407
defaultThumbRadius = resources.getDimensionPixelSize(R.dimen.mtrl_slider_thumb_radius);
404408
defaultTrackHeight = resources.getDimensionPixelSize(R.dimen.mtrl_slider_track_height);
405409

410+
defaultTickActiveRadius = resources.getDimensionPixelSize(R.dimen.mtrl_slider_tick_radius);
411+
defaultTickInactiveRadius = resources.getDimensionPixelSize(R.dimen.mtrl_slider_tick_radius);
412+
406413
labelPadding = resources.getDimensionPixelSize(R.dimen.mtrl_slider_label_padding);
407414
}
408415

@@ -492,6 +499,10 @@ private void processAttributes(Context context, AttributeSet attrs, int defStyle
492499

493500
setTrackHeight(a.getDimensionPixelSize(R.styleable.Slider_trackHeight, 0));
494501

502+
setTickActiveRadius(a.getDimensionPixelSize(R.styleable.Slider_tickRadiusActive, 0));
503+
504+
setTickInactiveRadius(a.getDimensionPixelSize(R.styleable.Slider_tickRadiusInactive, 0));
505+
495506
setLabelBehavior(a.getInt(R.styleable.Slider_labelBehavior, LABEL_FLOATING));
496507

497508
if (!a.getBoolean(R.styleable.Slider_android_enabled, true)) {
@@ -504,8 +515,12 @@ private void processAttributes(Context context, AttributeSet attrs, int defStyle
504515
private boolean maybeIncreaseTrackSidePadding() {
505516
int increasedSidePaddingByThumb = max(thumbRadius - defaultThumbRadius, 0);
506517
int increasedSidePaddingByTrack = max((trackHeight - defaultTrackHeight) / 2, 0);
518+
int increasedSidePaddingByActiveTick = max(tickActiveRadius - defaultTickActiveRadius, 0);
519+
int increasedSidePaddingByInactiveTick = max(tickInactiveRadius - defaultTickInactiveRadius, 0);
507520
int newTrackSidePadding =
508-
minTrackSidePadding + max(increasedSidePaddingByThumb, increasedSidePaddingByTrack);
521+
minTrackSidePadding + max(max(increasedSidePaddingByThumb, increasedSidePaddingByTrack),
522+
max(increasedSidePaddingByActiveTick, increasedSidePaddingByInactiveTick));
523+
509524
if (trackSidePadding == newTrackSidePadding) {
510525
return false;
511526
}
@@ -1281,6 +1296,56 @@ public void setTrackHeight(@IntRange(from = 0) @Dimension int trackHeight) {
12811296
}
12821297
}
12831298

1299+
/**
1300+
* Returns the radius of the active tick in pixels.
1301+
*
1302+
* @attr ref com.google.android.material.R.styleable#Slider_activeTickRadius
1303+
* @see #setTickActiveRadius(int)
1304+
*/
1305+
@Dimension()
1306+
public int getTickActiveRadius() {
1307+
return tickActiveRadius;
1308+
}
1309+
1310+
/**
1311+
* Set the radius of the active tick in pixels.
1312+
*
1313+
* @attr ref com.google.android.material.R.styleable#Slider_activeTickRadius
1314+
* @see #getTickActiveRadius()
1315+
*/
1316+
public void setTickActiveRadius(@IntRange(from = 0) @Dimension int tickActiveRadius) {
1317+
if (this.tickActiveRadius != tickActiveRadius) {
1318+
this.tickActiveRadius = tickActiveRadius;
1319+
activeTicksPaint.setStrokeWidth(tickActiveRadius * 2);
1320+
updateWidgetLayout();
1321+
}
1322+
}
1323+
1324+
/**
1325+
* Returns the radius of the inactive tick in pixels.
1326+
*
1327+
* @attr ref com.google.android.material.R.styleable#Slider_inactiveTickRadius
1328+
* @see #setTickInactiveRadius(int)
1329+
*/
1330+
@Dimension()
1331+
public int getTickInactiveRadius() {
1332+
return tickInactiveRadius;
1333+
}
1334+
1335+
/**
1336+
* Set the radius of the inactive tick in pixels.
1337+
*
1338+
* @attr ref com.google.android.material.R.styleable#Slider_inactiveTickRadius
1339+
* @see #getTickInactiveRadius()
1340+
*/
1341+
public void setTickInactiveRadius(@IntRange(from = 0) @Dimension int tickInactiveRadius) {
1342+
if (this.tickInactiveRadius != tickInactiveRadius) {
1343+
this.tickInactiveRadius = tickInactiveRadius;
1344+
inactiveTicksPaint.setStrokeWidth(tickInactiveRadius * 2);
1345+
updateWidgetLayout();
1346+
}
1347+
}
1348+
12841349
private void updateWidgetLayout() {
12851350
boolean sizeChanged = maybeIncreaseWidgetHeight();
12861351
boolean sidePaddingChanged = maybeIncreaseTrackSidePadding();
@@ -2260,8 +2325,6 @@ private void setValueForLabel(TooltipDrawable label, float value) {
22602325
private void invalidateTrack() {
22612326
inactiveTrackPaint.setStrokeWidth(trackHeight);
22622327
activeTrackPaint.setStrokeWidth(trackHeight);
2263-
inactiveTicksPaint.setStrokeWidth(trackHeight / 2.0f);
2264-
activeTicksPaint.setStrokeWidth(trackHeight / 2.0f);
22652328
}
22662329

22672330
/**

lib/java/com/google/android/material/slider/res-public/values/public.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
<public name="tickColor" type="attr" />
3030
<public name="tickColorActive" type="attr" />
3131
<public name="tickColorInactive" type="attr" />
32+
<public name="tickRadiusActive" type="attr" />
33+
<public name="tickRadiusInactive" type="attr" />
3234
<public name="tickVisible" type="attr" />
3335
<public name="trackColorActive" type="attr" />
3436
<public name="trackColorInactive" type="attr" />

lib/java/com/google/android/material/slider/res/values/attrs.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@
5959
<!-- The color of the slider's tick marks for the inactive portion of the track. Only used when
6060
the slider is in discrete mode. -->
6161
<attr name="tickColorInactive" format="color" />
62+
<!-- The radius of the active tick. Only used when the slider is in discrete mode.-->
63+
<attr name="tickRadiusActive" format="dimension" />
64+
<!-- The radius of the inactive tick. Only used when the slider is in discrete mode.-->
65+
<attr name="tickRadiusInactive" format="dimension" />
6266
<!-- Whether to show the tick marks. Only used when the slider is in discrete mode. -->
6367
<attr name="tickVisible" format="boolean" />
6468
<!-- The color of the track. -->

lib/java/com/google/android/material/slider/res/values/dimens.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
<dimen name="mtrl_slider_track_side_padding">16dp</dimen>
2222
<dimen name="mtrl_slider_track_height">4dp</dimen>
2323

24+
<dimen name="mtrl_slider_tick_radius">1dp</dimen>
25+
2426
<dimen name="mtrl_slider_thumb_radius">10dp</dimen>
2527
<dimen name="mtrl_slider_thumb_elevation">1dp</dimen>
2628

lib/java/com/google/android/material/slider/res/values/styles.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
<item name="thumbRadius">@dimen/mtrl_slider_thumb_radius</item>
2626
<item name="tickColorActive">@color/material_slider_active_tick_marks_color</item>
2727
<item name="tickColorInactive">@color/material_slider_inactive_tick_marks_color</item>
28+
<item name="tickRadiusActive">@dimen/mtrl_slider_tick_radius</item>
29+
<item name="tickRadiusInactive">@dimen/mtrl_slider_tick_radius</item>
2830
<item name="trackColorActive">@color/material_slider_active_track_color</item>
2931
<item name="trackColorInactive">@color/material_slider_inactive_track_color</item>
3032
<item name="trackHeight">@dimen/mtrl_slider_track_height</item>

0 commit comments

Comments
 (0)