Loading api/current.txt +10 −0 Original line number Diff line number Diff line Loading @@ -1288,6 +1288,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 field public static final int tickMark = 16844043; // 0x101050b field public static final int tickMarkTint = 16844044; // 0x101050c field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 Loading Loading @@ -2547,6 +2550,7 @@ package android { field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e field public static final int Widget_Material_SearchView = 16974463; // 0x103027f field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9 field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 Loading Loading @@ -44489,12 +44493,18 @@ package android.widget { method public int getThumbOffset(); method public android.content.res.ColorStateList getThumbTintList(); method public android.graphics.PorterDuff.Mode getThumbTintMode(); method public android.graphics.drawable.Drawable getTickMark(); method public android.content.res.ColorStateList getTickMarkTintList(); method public android.graphics.PorterDuff.Mode getTickMarkTintMode(); method public void setKeyProgressIncrement(int); method public void setSplitTrack(boolean); method public void setThumb(android.graphics.drawable.Drawable); method public void setThumbOffset(int); method public void setThumbTintList(android.content.res.ColorStateList); method public void setThumbTintMode(android.graphics.PorterDuff.Mode); method public void setTickMark(android.graphics.drawable.Drawable); method public void setTickMarkTintList(android.content.res.ColorStateList); method public void setTickMarkTintMode(android.graphics.PorterDuff.Mode); } public abstract class AbsSpinner extends android.widget.AdapterView { api/system-current.txt +10 −0 Original line number Diff line number Diff line Loading @@ -1386,6 +1386,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 field public static final int tickMark = 16844043; // 0x101050b field public static final int tickMarkTint = 16844044; // 0x101050c field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 Loading Loading @@ -2648,6 +2651,7 @@ package android { field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e field public static final int Widget_Material_SearchView = 16974463; // 0x103027f field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9 field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 Loading Loading @@ -47152,12 +47156,18 @@ package android.widget { method public int getThumbOffset(); method public android.content.res.ColorStateList getThumbTintList(); method public android.graphics.PorterDuff.Mode getThumbTintMode(); method public android.graphics.drawable.Drawable getTickMark(); method public android.content.res.ColorStateList getTickMarkTintList(); method public android.graphics.PorterDuff.Mode getTickMarkTintMode(); method public void setKeyProgressIncrement(int); method public void setSplitTrack(boolean); method public void setThumb(android.graphics.drawable.Drawable); method public void setThumbOffset(int); method public void setThumbTintList(android.content.res.ColorStateList); method public void setThumbTintMode(android.graphics.PorterDuff.Mode); method public void setTickMark(android.graphics.drawable.Drawable); method public void setTickMarkTintList(android.content.res.ColorStateList); method public void setTickMarkTintMode(android.graphics.PorterDuff.Mode); } public abstract class AbsSpinner extends android.widget.AdapterView { api/test-current.txt +10 −0 Original line number Diff line number Diff line Loading @@ -1288,6 +1288,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 field public static final int tickMark = 16844043; // 0x101050b field public static final int tickMarkTint = 16844044; // 0x101050c field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 Loading Loading @@ -2547,6 +2550,7 @@ package android { field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e field public static final int Widget_Material_SearchView = 16974463; // 0x103027f field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9 field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 Loading Loading @@ -44505,12 +44509,18 @@ package android.widget { method public int getThumbOffset(); method public android.content.res.ColorStateList getThumbTintList(); method public android.graphics.PorterDuff.Mode getThumbTintMode(); method public android.graphics.drawable.Drawable getTickMark(); method public android.content.res.ColorStateList getTickMarkTintList(); method public android.graphics.PorterDuff.Mode getTickMarkTintMode(); method public void setKeyProgressIncrement(int); method public void setSplitTrack(boolean); method public void setThumb(android.graphics.drawable.Drawable); method public void setThumbOffset(int); method public void setThumbTintList(android.content.res.ColorStateList); method public void setThumbTintMode(android.graphics.PorterDuff.Mode); method public void setTickMark(android.graphics.drawable.Drawable); method public void setTickMarkTintList(android.content.res.ColorStateList); method public void setTickMarkTintMode(android.graphics.PorterDuff.Mode); } public abstract class AbsSpinner extends android.widget.AdapterView { core/java/android/widget/AbsSeekBar.java +179 −4 Original line number Diff line number Diff line Loading @@ -44,6 +44,12 @@ public abstract class AbsSeekBar extends ProgressBar { private boolean mHasThumbTint = false; private boolean mHasThumbTintMode = false; private Drawable mTickMark; private ColorStateList mTickMarkTintList = null; private PorterDuff.Mode mTickMarkTintMode = null; private boolean mHasTickMarkTint = false; private boolean mHasTickMarkTintMode = false; private int mThumbOffset; private boolean mSplitTrack; Loading Loading @@ -103,10 +109,25 @@ public abstract class AbsSeekBar extends ProgressBar { mHasThumbTint = true; } final Drawable tickMark = a.getDrawable(R.styleable.SeekBar_tickMark); setTickMark(tickMark); if (a.hasValue(R.styleable.SeekBar_tickMarkTintMode)) { mTickMarkTintMode = Drawable.parseTintMode(a.getInt( R.styleable.SeekBar_tickMarkTintMode, -1), mTickMarkTintMode); mHasTickMarkTintMode = true; } if (a.hasValue(R.styleable.SeekBar_tickMarkTint)) { mTickMarkTintList = a.getColorStateList(R.styleable.SeekBar_tickMarkTint); mHasTickMarkTint = true; } mSplitTrack = a.getBoolean(R.styleable.SeekBar_splitTrack, false); // Guess thumb offset if thumb != null, but allow layout to override. final int thumbOffset = a.getDimensionPixelOffset(R.styleable.SeekBar_thumbOffset, getThumbOffset()); final int thumbOffset = a.getDimensionPixelOffset( R.styleable.SeekBar_thumbOffset, getThumbOffset()); setThumbOffset(thumbOffset); final boolean useDisabledAlpha = a.getBoolean(R.styleable.SeekBar_useDisabledAlpha, true); Loading Loading @@ -312,6 +333,123 @@ public abstract class AbsSeekBar extends ProgressBar { return mSplitTrack; } /** * Sets the drawable displayed at each progress position, e.g. at each * possible thumb position. * * @param tickMark the drawable to display at each progress position */ public void setTickMark(Drawable tickMark) { if (mTickMark != null) { mTickMark.setCallback(null); } mTickMark = tickMark; if (tickMark != null) { tickMark.setCallback(this); tickMark.setLayoutDirection(getLayoutDirection()); if (tickMark.isStateful()) { tickMark.setState(getDrawableState()); } applyTickMarkTint(); } invalidate(); } /** * @return the drawable displayed at each progress position */ public Drawable getTickMark() { return mTickMark; } /** * Applies a tint to the tick mark drawable. Does not modify the current tint * mode, which is {@link PorterDuff.Mode#SRC_IN} by default. * <p> * Subsequent calls to {@link #setTickMark(Drawable)} will automatically * mutate the drawable and apply the specified tint and tint mode using * {@link Drawable#setTintList(ColorStateList)}. * * @param tint the tint to apply, may be {@code null} to clear tint * * @attr ref android.R.styleable#SeekBar_tickMarkTint * @see #getTickMarkTintList() * @see Drawable#setTintList(ColorStateList) */ public void setTickMarkTintList(@Nullable ColorStateList tint) { mTickMarkTintList = tint; mHasTickMarkTint = true; applyTickMarkTint(); } /** * Returns the tint applied to the tick mark drawable, if specified. * * @return the tint applied to the tick mark drawable * @attr ref android.R.styleable#SeekBar_tickMarkTint * @see #setTickMarkTintList(ColorStateList) */ @Nullable public ColorStateList getTickMarkTintList() { return mTickMarkTintList; } /** * Specifies the blending mode used to apply the tint specified by * {@link #setTickMarkTintList(ColorStateList)}} to the tick mark drawable. The * default mode is {@link PorterDuff.Mode#SRC_IN}. * * @param tintMode the blending mode used to apply the tint, may be * {@code null} to clear tint * * @attr ref android.R.styleable#SeekBar_tickMarkTintMode * @see #getTickMarkTintMode() * @see Drawable#setTintMode(PorterDuff.Mode) */ public void setTickMarkTintMode(@Nullable PorterDuff.Mode tintMode) { mTickMarkTintMode = tintMode; mHasTickMarkTintMode = true; applyTickMarkTint(); } /** * Returns the blending mode used to apply the tint to the tick mark drawable, * if specified. * * @return the blending mode used to apply the tint to the tick mark drawable * @attr ref android.R.styleable#SeekBar_tickMarkTintMode * @see #setTickMarkTintMode(PorterDuff.Mode) */ @Nullable public PorterDuff.Mode getTickMarkTintMode() { return mTickMarkTintMode; } private void applyTickMarkTint() { if (mTickMark != null && (mHasTickMarkTint || mHasTickMarkTintMode)) { mTickMark = mTickMark.mutate(); if (mHasTickMarkTint) { mTickMark.setTintList(mTickMarkTintList); } if (mHasTickMarkTintMode) { mTickMark.setTintMode(mTickMarkTintMode); } // The drawable (or one of its children) may not have been // stateful before applying the tint, so let's try again. if (mTickMark.isStateful()) { mTickMark.setState(getDrawableState()); } } } /** * Sets the amount of progress changed via the arrow keys. * Loading Loading @@ -347,7 +485,7 @@ public abstract class AbsSeekBar extends ProgressBar { @Override protected boolean verifyDrawable(Drawable who) { return who == mThumb || super.verifyDrawable(who); return who == mThumb || who == mTickMark || super.verifyDrawable(who); } @Override Loading @@ -357,6 +495,10 @@ public abstract class AbsSeekBar extends ProgressBar { if (mThumb != null) { mThumb.jumpToCurrentState(); } if (mTickMark != null) { mTickMark.jumpToCurrentState(); } } @Override Loading @@ -373,6 +515,12 @@ public abstract class AbsSeekBar extends ProgressBar { && thumb.setState(getDrawableState())) { invalidateDrawable(thumb); } final Drawable tickMark = mTickMark; if (tickMark != null && tickMark.isStateful() && tickMark.setState(getDrawableState())) { invalidateDrawable(tickMark); } } @Override Loading Loading @@ -524,9 +672,36 @@ public abstract class AbsSeekBar extends ProgressBar { final int saveCount = canvas.save(); canvas.clipRect(tempRect, Op.DIFFERENCE); super.drawTrack(canvas); drawTickMarks(canvas); canvas.restoreToCount(saveCount); } else { super.drawTrack(canvas); drawTickMarks(canvas); } } /** * Draw the tick marks. */ void drawTickMarks(Canvas canvas) { if (mTickMark != null) { final int count = getMax(); if (count > 1) { final int w = mTickMark.getIntrinsicWidth(); final int h = mTickMark.getIntrinsicHeight(); final int halfW = w >= 0 ? w / 2 : 1; final int halfH = h >= 0 ? h / 2 : 1; mTickMark.setBounds(-halfW, -halfH, halfW, halfH); final int spacing = (getWidth() - mPaddingLeft - mPaddingRight) / count; final int saveCount = canvas.save(); canvas.translate(mPaddingLeft, getHeight() / 2); for (int i = 0; i <= count; i++) { mTickMark.draw(canvas); canvas.translate(spacing, 0); } canvas.restoreToCount(saveCount); } } } Loading @@ -535,12 +710,12 @@ public abstract class AbsSeekBar extends ProgressBar { */ void drawThumb(Canvas canvas) { if (mThumb != null) { canvas.save(); final int saveCount = canvas.save(); // Translate the padding. For the x, we need to allow the thumb to // draw in its extra space canvas.translate(mPaddingLeft - mThumbOffset, mPaddingTop); mThumb.draw(canvas); canvas.restore(); canvas.restoreToCount(saveCount); } } Loading core/res/res/drawable/seekbar_tick_mark_material.xml 0 → 100644 +23 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:tint="?attr/colorControlNormal"> <size android:width="@dimen/progress_bar_height_material" android:height="@dimen/progress_bar_height_material" /> <solid android:color="@color/white" /> </shape> Loading
api/current.txt +10 −0 Original line number Diff line number Diff line Loading @@ -1288,6 +1288,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 field public static final int tickMark = 16844043; // 0x101050b field public static final int tickMarkTint = 16844044; // 0x101050c field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 Loading Loading @@ -2547,6 +2550,7 @@ package android { field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e field public static final int Widget_Material_SearchView = 16974463; // 0x103027f field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9 field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 Loading Loading @@ -44489,12 +44493,18 @@ package android.widget { method public int getThumbOffset(); method public android.content.res.ColorStateList getThumbTintList(); method public android.graphics.PorterDuff.Mode getThumbTintMode(); method public android.graphics.drawable.Drawable getTickMark(); method public android.content.res.ColorStateList getTickMarkTintList(); method public android.graphics.PorterDuff.Mode getTickMarkTintMode(); method public void setKeyProgressIncrement(int); method public void setSplitTrack(boolean); method public void setThumb(android.graphics.drawable.Drawable); method public void setThumbOffset(int); method public void setThumbTintList(android.content.res.ColorStateList); method public void setThumbTintMode(android.graphics.PorterDuff.Mode); method public void setTickMark(android.graphics.drawable.Drawable); method public void setTickMarkTintList(android.content.res.ColorStateList); method public void setTickMarkTintMode(android.graphics.PorterDuff.Mode); } public abstract class AbsSpinner extends android.widget.AdapterView {
api/system-current.txt +10 −0 Original line number Diff line number Diff line Loading @@ -1386,6 +1386,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 field public static final int tickMark = 16844043; // 0x101050b field public static final int tickMarkTint = 16844044; // 0x101050c field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 Loading Loading @@ -2648,6 +2651,7 @@ package android { field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e field public static final int Widget_Material_SearchView = 16974463; // 0x103027f field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9 field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 Loading Loading @@ -47152,12 +47156,18 @@ package android.widget { method public int getThumbOffset(); method public android.content.res.ColorStateList getThumbTintList(); method public android.graphics.PorterDuff.Mode getThumbTintMode(); method public android.graphics.drawable.Drawable getTickMark(); method public android.content.res.ColorStateList getTickMarkTintList(); method public android.graphics.PorterDuff.Mode getTickMarkTintMode(); method public void setKeyProgressIncrement(int); method public void setSplitTrack(boolean); method public void setThumb(android.graphics.drawable.Drawable); method public void setThumbOffset(int); method public void setThumbTintList(android.content.res.ColorStateList); method public void setThumbTintMode(android.graphics.PorterDuff.Mode); method public void setTickMark(android.graphics.drawable.Drawable); method public void setTickMarkTintList(android.content.res.ColorStateList); method public void setTickMarkTintMode(android.graphics.PorterDuff.Mode); } public abstract class AbsSpinner extends android.widget.AdapterView {
api/test-current.txt +10 −0 Original line number Diff line number Diff line Loading @@ -1288,6 +1288,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 field public static final int tickMark = 16844043; // 0x101050b field public static final int tickMarkTint = 16844044; // 0x101050c field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 Loading Loading @@ -2547,6 +2550,7 @@ package android { field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e field public static final int Widget_Material_SearchView = 16974463; // 0x103027f field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9 field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 Loading Loading @@ -44505,12 +44509,18 @@ package android.widget { method public int getThumbOffset(); method public android.content.res.ColorStateList getThumbTintList(); method public android.graphics.PorterDuff.Mode getThumbTintMode(); method public android.graphics.drawable.Drawable getTickMark(); method public android.content.res.ColorStateList getTickMarkTintList(); method public android.graphics.PorterDuff.Mode getTickMarkTintMode(); method public void setKeyProgressIncrement(int); method public void setSplitTrack(boolean); method public void setThumb(android.graphics.drawable.Drawable); method public void setThumbOffset(int); method public void setThumbTintList(android.content.res.ColorStateList); method public void setThumbTintMode(android.graphics.PorterDuff.Mode); method public void setTickMark(android.graphics.drawable.Drawable); method public void setTickMarkTintList(android.content.res.ColorStateList); method public void setTickMarkTintMode(android.graphics.PorterDuff.Mode); } public abstract class AbsSpinner extends android.widget.AdapterView {
core/java/android/widget/AbsSeekBar.java +179 −4 Original line number Diff line number Diff line Loading @@ -44,6 +44,12 @@ public abstract class AbsSeekBar extends ProgressBar { private boolean mHasThumbTint = false; private boolean mHasThumbTintMode = false; private Drawable mTickMark; private ColorStateList mTickMarkTintList = null; private PorterDuff.Mode mTickMarkTintMode = null; private boolean mHasTickMarkTint = false; private boolean mHasTickMarkTintMode = false; private int mThumbOffset; private boolean mSplitTrack; Loading Loading @@ -103,10 +109,25 @@ public abstract class AbsSeekBar extends ProgressBar { mHasThumbTint = true; } final Drawable tickMark = a.getDrawable(R.styleable.SeekBar_tickMark); setTickMark(tickMark); if (a.hasValue(R.styleable.SeekBar_tickMarkTintMode)) { mTickMarkTintMode = Drawable.parseTintMode(a.getInt( R.styleable.SeekBar_tickMarkTintMode, -1), mTickMarkTintMode); mHasTickMarkTintMode = true; } if (a.hasValue(R.styleable.SeekBar_tickMarkTint)) { mTickMarkTintList = a.getColorStateList(R.styleable.SeekBar_tickMarkTint); mHasTickMarkTint = true; } mSplitTrack = a.getBoolean(R.styleable.SeekBar_splitTrack, false); // Guess thumb offset if thumb != null, but allow layout to override. final int thumbOffset = a.getDimensionPixelOffset(R.styleable.SeekBar_thumbOffset, getThumbOffset()); final int thumbOffset = a.getDimensionPixelOffset( R.styleable.SeekBar_thumbOffset, getThumbOffset()); setThumbOffset(thumbOffset); final boolean useDisabledAlpha = a.getBoolean(R.styleable.SeekBar_useDisabledAlpha, true); Loading Loading @@ -312,6 +333,123 @@ public abstract class AbsSeekBar extends ProgressBar { return mSplitTrack; } /** * Sets the drawable displayed at each progress position, e.g. at each * possible thumb position. * * @param tickMark the drawable to display at each progress position */ public void setTickMark(Drawable tickMark) { if (mTickMark != null) { mTickMark.setCallback(null); } mTickMark = tickMark; if (tickMark != null) { tickMark.setCallback(this); tickMark.setLayoutDirection(getLayoutDirection()); if (tickMark.isStateful()) { tickMark.setState(getDrawableState()); } applyTickMarkTint(); } invalidate(); } /** * @return the drawable displayed at each progress position */ public Drawable getTickMark() { return mTickMark; } /** * Applies a tint to the tick mark drawable. Does not modify the current tint * mode, which is {@link PorterDuff.Mode#SRC_IN} by default. * <p> * Subsequent calls to {@link #setTickMark(Drawable)} will automatically * mutate the drawable and apply the specified tint and tint mode using * {@link Drawable#setTintList(ColorStateList)}. * * @param tint the tint to apply, may be {@code null} to clear tint * * @attr ref android.R.styleable#SeekBar_tickMarkTint * @see #getTickMarkTintList() * @see Drawable#setTintList(ColorStateList) */ public void setTickMarkTintList(@Nullable ColorStateList tint) { mTickMarkTintList = tint; mHasTickMarkTint = true; applyTickMarkTint(); } /** * Returns the tint applied to the tick mark drawable, if specified. * * @return the tint applied to the tick mark drawable * @attr ref android.R.styleable#SeekBar_tickMarkTint * @see #setTickMarkTintList(ColorStateList) */ @Nullable public ColorStateList getTickMarkTintList() { return mTickMarkTintList; } /** * Specifies the blending mode used to apply the tint specified by * {@link #setTickMarkTintList(ColorStateList)}} to the tick mark drawable. The * default mode is {@link PorterDuff.Mode#SRC_IN}. * * @param tintMode the blending mode used to apply the tint, may be * {@code null} to clear tint * * @attr ref android.R.styleable#SeekBar_tickMarkTintMode * @see #getTickMarkTintMode() * @see Drawable#setTintMode(PorterDuff.Mode) */ public void setTickMarkTintMode(@Nullable PorterDuff.Mode tintMode) { mTickMarkTintMode = tintMode; mHasTickMarkTintMode = true; applyTickMarkTint(); } /** * Returns the blending mode used to apply the tint to the tick mark drawable, * if specified. * * @return the blending mode used to apply the tint to the tick mark drawable * @attr ref android.R.styleable#SeekBar_tickMarkTintMode * @see #setTickMarkTintMode(PorterDuff.Mode) */ @Nullable public PorterDuff.Mode getTickMarkTintMode() { return mTickMarkTintMode; } private void applyTickMarkTint() { if (mTickMark != null && (mHasTickMarkTint || mHasTickMarkTintMode)) { mTickMark = mTickMark.mutate(); if (mHasTickMarkTint) { mTickMark.setTintList(mTickMarkTintList); } if (mHasTickMarkTintMode) { mTickMark.setTintMode(mTickMarkTintMode); } // The drawable (or one of its children) may not have been // stateful before applying the tint, so let's try again. if (mTickMark.isStateful()) { mTickMark.setState(getDrawableState()); } } } /** * Sets the amount of progress changed via the arrow keys. * Loading Loading @@ -347,7 +485,7 @@ public abstract class AbsSeekBar extends ProgressBar { @Override protected boolean verifyDrawable(Drawable who) { return who == mThumb || super.verifyDrawable(who); return who == mThumb || who == mTickMark || super.verifyDrawable(who); } @Override Loading @@ -357,6 +495,10 @@ public abstract class AbsSeekBar extends ProgressBar { if (mThumb != null) { mThumb.jumpToCurrentState(); } if (mTickMark != null) { mTickMark.jumpToCurrentState(); } } @Override Loading @@ -373,6 +515,12 @@ public abstract class AbsSeekBar extends ProgressBar { && thumb.setState(getDrawableState())) { invalidateDrawable(thumb); } final Drawable tickMark = mTickMark; if (tickMark != null && tickMark.isStateful() && tickMark.setState(getDrawableState())) { invalidateDrawable(tickMark); } } @Override Loading Loading @@ -524,9 +672,36 @@ public abstract class AbsSeekBar extends ProgressBar { final int saveCount = canvas.save(); canvas.clipRect(tempRect, Op.DIFFERENCE); super.drawTrack(canvas); drawTickMarks(canvas); canvas.restoreToCount(saveCount); } else { super.drawTrack(canvas); drawTickMarks(canvas); } } /** * Draw the tick marks. */ void drawTickMarks(Canvas canvas) { if (mTickMark != null) { final int count = getMax(); if (count > 1) { final int w = mTickMark.getIntrinsicWidth(); final int h = mTickMark.getIntrinsicHeight(); final int halfW = w >= 0 ? w / 2 : 1; final int halfH = h >= 0 ? h / 2 : 1; mTickMark.setBounds(-halfW, -halfH, halfW, halfH); final int spacing = (getWidth() - mPaddingLeft - mPaddingRight) / count; final int saveCount = canvas.save(); canvas.translate(mPaddingLeft, getHeight() / 2); for (int i = 0; i <= count; i++) { mTickMark.draw(canvas); canvas.translate(spacing, 0); } canvas.restoreToCount(saveCount); } } } Loading @@ -535,12 +710,12 @@ public abstract class AbsSeekBar extends ProgressBar { */ void drawThumb(Canvas canvas) { if (mThumb != null) { canvas.save(); final int saveCount = canvas.save(); // Translate the padding. For the x, we need to allow the thumb to // draw in its extra space canvas.translate(mPaddingLeft - mThumbOffset, mPaddingTop); mThumb.draw(canvas); canvas.restore(); canvas.restoreToCount(saveCount); } } Loading
core/res/res/drawable/seekbar_tick_mark_material.xml 0 → 100644 +23 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:tint="?attr/colorControlNormal"> <size android:width="@dimen/progress_bar_height_material" android:height="@dimen/progress_bar_height_material" /> <solid android:color="@color/white" /> </shape>