Skip to content

Commit 7bf15fb

Browse files
committed
[Slider] setup/get active and inactive tick radius
1 parent 1ef53e2 commit 7bf15fb

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

@@ -493,6 +500,10 @@ private void processAttributes(Context context, AttributeSet attrs, int defStyle
493500

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

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

498509
if (!a.getBoolean(R.styleable.Slider_android_enabled, true)) {
@@ -505,8 +516,12 @@ private void processAttributes(Context context, AttributeSet attrs, int defStyle
505516
private boolean maybeIncreaseTrackSidePadding() {
506517
int increasedSidePaddingByThumb = max(thumbRadius - defaultThumbRadius, 0);
507518
int increasedSidePaddingByTrack = max((trackHeight - defaultTrackHeight) / 2, 0);
519+
int increasedSidePaddingByActiveTick = max(tickActiveRadius - defaultTickActiveRadius, 0);
520+
int increasedSidePaddingByInactiveTick = max(tickInactiveRadius - defaultTickInactiveRadius, 0);
508521
int newTrackSidePadding =
509-
minTrackSidePadding + max(increasedSidePaddingByThumb, increasedSidePaddingByTrack);
522+
minTrackSidePadding + max(max(increasedSidePaddingByThumb, increasedSidePaddingByTrack),
523+
max(increasedSidePaddingByActiveTick, increasedSidePaddingByInactiveTick));
524+
510525
if (trackSidePadding == newTrackSidePadding) {
511526
return false;
512527
}
@@ -1282,6 +1297,56 @@ public void setTrackHeight(@IntRange(from = 0) @Dimension int trackHeight) {
12821297
}
12831298
}
12841299

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

22562319
/**

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)