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