diff options
Diffstat (limited to 'graphics/java/android/graphics/drawable/MaterialProgressDrawable.java')
-rw-r--r-- | graphics/java/android/graphics/drawable/MaterialProgressDrawable.java | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/drawable/MaterialProgressDrawable.java b/graphics/java/android/graphics/drawable/MaterialProgressDrawable.java index 9e56f67..c484094 100644 --- a/graphics/java/android/graphics/drawable/MaterialProgressDrawable.java +++ b/graphics/java/android/graphics/drawable/MaterialProgressDrawable.java @@ -27,8 +27,10 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; +import android.graphics.PorterDuffColorFilter; import android.graphics.Paint.Cap; import android.graphics.Paint.Style; +import android.graphics.PorterDuff.Mode; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RectF; @@ -67,6 +69,7 @@ class MaterialProgressDrawable extends Drawable implements Animatable { private final Ring mRing; private MaterialProgressState mState; + private PorterDuffColorFilter mTintFilter; /** Canvas rotation in degrees. */ private float mRotation; @@ -106,6 +109,8 @@ class MaterialProgressDrawable extends Drawable implements Animatable { float insets = minEdge / 2.0f - state.mInnerRadius; ring.setInsets(insets); } + + mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); } @Override @@ -118,15 +123,21 @@ class MaterialProgressDrawable extends Drawable implements Animatable { } @Override - protected boolean onStateChange(int[] state) { - boolean changed = super.onStateChange(state); + protected boolean onStateChange(int[] stateSet) { + boolean changed = super.onStateChange(stateSet); - final int color = mState.mColor.getColorForState(state, Color.TRANSPARENT); + final MaterialProgressState state = mState; + final int color = state.mColor.getColorForState(stateSet, Color.TRANSPARENT); if (color != mRing.getColor()) { mRing.setColor(color); changed = true; } + if (state.mTint != null && state.mTintMode != null) { + mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); + changed = true; + } + return changed; } @@ -223,11 +234,24 @@ class MaterialProgressDrawable extends Drawable implements Animatable { return mRing.getColorFilter(); } + @Override + public void setTint(ColorStateList tint, Mode tintMode) { + if (mState.mTint != tint || mState.mTintMode != tintMode) { + mState.mTint = tint; + mState.mTintMode = tintMode; + + mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); + invalidateSelf(); + } + } + + @SuppressWarnings("unused") private void setRotation(float rotation) { mRotation = rotation; invalidateSelf(); } + @SuppressWarnings("unused") private float getRotation() { return mRotation; } @@ -331,6 +355,8 @@ class MaterialProgressDrawable extends Drawable implements Animatable { private int mWidth = -1; private int mHeight = -1; private ColorStateList mColor = ColorStateList.valueOf(Color.TRANSPARENT); + private ColorStateList mTint = null; + private Mode mTintMode = null; public MaterialProgressState(MaterialProgressState orig) { if (orig != null) { @@ -340,6 +366,8 @@ class MaterialProgressDrawable extends Drawable implements Animatable { mWidth = orig.mWidth; mHeight = orig.mHeight; mColor = orig.mColor; + mTint = orig.mTint; + mTintMode = orig.mTintMode; } } |