@@ -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 /**
0 commit comments