Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions docs/components/Slider.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,12 +333,14 @@ Element | Attribute | Related method(s)

#### Tick mark attributes

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

**Note:** `app:tickColor` takes precedence over `app:tickColorActive` and
`app:tickColorInative`. It's a shorthand for setting both values to the same
Expand Down
69 changes: 66 additions & 3 deletions lib/java/com/google/android/material/slider/BaseSlider.java
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ abstract class BaseSlider<
private int minTrackSidePadding;
private int defaultThumbRadius;
private int defaultTrackHeight;
private int defaultTickActiveRadius;
private int defaultTickInactiveRadius;

@Dimension(unit = Dimension.PX)
private int minTouchTargetSize;
Expand Down Expand Up @@ -298,6 +300,8 @@ abstract class BaseSlider<
private float stepSize = 0.0f;
private float[] ticksCoordinates;
private boolean tickVisible = true;
private int tickActiveRadius;
private int tickInactiveRadius;
private int trackWidth;
private boolean forceDrawCompatHalo;
private boolean isLongPress = false;
Expand Down Expand Up @@ -403,6 +407,9 @@ private void loadResources(@NonNull Resources resources) {
defaultThumbRadius = resources.getDimensionPixelSize(R.dimen.mtrl_slider_thumb_radius);
defaultTrackHeight = resources.getDimensionPixelSize(R.dimen.mtrl_slider_track_height);

defaultTickActiveRadius = resources.getDimensionPixelSize(R.dimen.mtrl_slider_tick_radius);
defaultTickInactiveRadius = resources.getDimensionPixelSize(R.dimen.mtrl_slider_tick_radius);

labelPadding = resources.getDimensionPixelSize(R.dimen.mtrl_slider_label_padding);
}

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

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

setTickActiveRadius(a.getDimensionPixelSize(R.styleable.Slider_tickRadiusActive, 0));

setTickInactiveRadius(a.getDimensionPixelSize(R.styleable.Slider_tickRadiusInactive, 0));

setLabelBehavior(a.getInt(R.styleable.Slider_labelBehavior, LABEL_FLOATING));

if (!a.getBoolean(R.styleable.Slider_android_enabled, true)) {
Expand All @@ -505,8 +516,12 @@ private void processAttributes(Context context, AttributeSet attrs, int defStyle
private boolean maybeIncreaseTrackSidePadding() {
int increasedSidePaddingByThumb = max(thumbRadius - defaultThumbRadius, 0);
int increasedSidePaddingByTrack = max((trackHeight - defaultTrackHeight) / 2, 0);
int increasedSidePaddingByActiveTick = max(tickActiveRadius - defaultTickActiveRadius, 0);
int increasedSidePaddingByInactiveTick = max(tickInactiveRadius - defaultTickInactiveRadius, 0);
int newTrackSidePadding =
minTrackSidePadding + max(increasedSidePaddingByThumb, increasedSidePaddingByTrack);
minTrackSidePadding + max(max(increasedSidePaddingByThumb, increasedSidePaddingByTrack),
max(increasedSidePaddingByActiveTick, increasedSidePaddingByInactiveTick));

if (trackSidePadding == newTrackSidePadding) {
return false;
}
Expand Down Expand Up @@ -1282,6 +1297,56 @@ public void setTrackHeight(@IntRange(from = 0) @Dimension int trackHeight) {
}
}

/**
* Returns the radius of the active tick in pixels.
*
* @attr ref com.google.android.material.R.styleable#Slider_activeTickRadius
* @see #setTickActiveRadius(int)
*/
@Dimension()
public int getTickActiveRadius() {
return tickActiveRadius;
}

/**
* Set the radius of the active tick in pixels.
*
* @attr ref com.google.android.material.R.styleable#Slider_activeTickRadius
* @see #getTickActiveRadius()
*/
public void setTickActiveRadius(@IntRange(from = 0) @Dimension int tickActiveRadius) {
if (this.tickActiveRadius != tickActiveRadius) {
this.tickActiveRadius = tickActiveRadius;
activeTicksPaint.setStrokeWidth(tickActiveRadius * 2);
updateWidgetLayout();
}
}

/**
* Returns the radius of the inactive tick in pixels.
*
* @attr ref com.google.android.material.R.styleable#Slider_inactiveTickRadius
* @see #setTickInactiveRadius(int)
*/
@Dimension()
public int getTickInactiveRadius() {
return tickInactiveRadius;
}

/**
* Set the radius of the inactive tick in pixels.
*
* @attr ref com.google.android.material.R.styleable#Slider_inactiveTickRadius
* @see #getTickInactiveRadius()
*/
public void setTickInactiveRadius(@IntRange(from = 0) @Dimension int tickInactiveRadius) {
if (this.tickInactiveRadius != tickInactiveRadius) {
this.tickInactiveRadius = tickInactiveRadius;
inactiveTicksPaint.setStrokeWidth(tickInactiveRadius * 2);
updateWidgetLayout();
}
}

private void updateWidgetLayout() {
boolean sizeChanged = maybeIncreaseWidgetHeight();
boolean sidePaddingChanged = maybeIncreaseTrackSidePadding();
Expand Down Expand Up @@ -2249,8 +2314,6 @@ private void setValueForLabel(TooltipDrawable label, float value) {
private void invalidateTrack() {
inactiveTrackPaint.setStrokeWidth(trackHeight);
activeTrackPaint.setStrokeWidth(trackHeight);
inactiveTicksPaint.setStrokeWidth(trackHeight / 2.0f);
activeTicksPaint.setStrokeWidth(trackHeight / 2.0f);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
<public name="tickColor" type="attr" />
<public name="tickColorActive" type="attr" />
<public name="tickColorInactive" type="attr" />
<public name="tickRadiusActive" type="attr" />
<public name="tickRadiusInactive" type="attr" />
<public name="tickVisible" type="attr" />
<public name="trackColorActive" type="attr" />
<public name="trackColorInactive" type="attr" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@
<!-- The color of the slider's tick marks for the inactive portion of the track. Only used when
the slider is in discrete mode. -->
<attr name="tickColorInactive" format="color" />
<!-- The radius of the active tick. Only used when the slider is in discrete mode.-->
<attr name="tickRadiusActive" format="dimension" />
<!-- The radius of the inactive tick. Only used when the slider is in discrete mode.-->
<attr name="tickRadiusInactive" format="dimension" />
<!-- Whether to show the tick marks. Only used when the slider is in discrete mode. -->
<attr name="tickVisible" format="boolean" />
<!-- The color of the track. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
<dimen name="mtrl_slider_track_side_padding">16dp</dimen>
<dimen name="mtrl_slider_track_height">4dp</dimen>

<dimen name="mtrl_slider_tick_radius">1dp</dimen>

<dimen name="mtrl_slider_thumb_radius">10dp</dimen>
<dimen name="mtrl_slider_thumb_elevation">1dp</dimen>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
<item name="thumbRadius">@dimen/mtrl_slider_thumb_radius</item>
<item name="tickColorActive">@color/material_slider_active_tick_marks_color</item>
<item name="tickColorInactive">@color/material_slider_inactive_tick_marks_color</item>
<item name="tickRadiusActive">@dimen/mtrl_slider_tick_radius</item>
<item name="tickRadiusInactive">@dimen/mtrl_slider_tick_radius</item>
<item name="trackColorActive">@color/material_slider_active_track_color</item>
<item name="trackColorInactive">@color/material_slider_inactive_track_color</item>
<item name="trackHeight">@dimen/mtrl_slider_track_height</item>
Expand Down