diff options
| author | Nader Jawad <njawad@google.com> | 2018-04-20 15:56:10 -0700 |
|---|---|---|
| committer | Nader Jawad <njawad@google.com> | 2018-04-23 16:00:49 -0700 |
| commit | e6a6321a928a423bcd881b66e2f5ec2cfabc6e76 (patch) | |
| tree | 5447f38cc27069ceeb00156c4497025369631894 /core/java/android/widget/ImageView.java | |
| parent | bccd17118982e8c47be9b95d8f6597181e7d5091 (diff) | |
Removed applyColorMod method in favor of individually setting
properties.
Created dedicated applyXfermode, applyColorFilter and applyAlpha methods
to ensure that properties are not being overwritten unnecessarily
Fixes: 30167384
Test: Re-ran atest CtsWidgeTestCases:ImageViewTest
Change-Id: Ie4a18172dbf222559ace1b740a6c6fdfe33f4dfe
Diffstat (limited to 'core/java/android/widget/ImageView.java')
| -rw-r--r-- | core/java/android/widget/ImageView.java | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 13729874d369..b12e854fb20c 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -109,9 +109,10 @@ public class ImageView extends View { private ColorFilter mColorFilter = null; private boolean mHasColorFilter = false; private Xfermode mXfermode; + private boolean mHasXfermode = false; private int mAlpha = 255; + private boolean mHasAlpha = false; private final int mViewAlphaScale = 256; - private boolean mColorMod = false; private Drawable mDrawable = null; private BitmapDrawable mRecycleableBitmapDrawable = null; @@ -1007,7 +1008,9 @@ public class ImageView extends View { mDrawableWidth = d.getIntrinsicWidth(); mDrawableHeight = d.getIntrinsicHeight(); applyImageTint(); - applyColorMod(); + applyColorFilter(); + applyAlpha(); + applyXfermode(); configureBounds(); } else { @@ -1462,8 +1465,8 @@ public class ImageView extends View { public final void setXfermode(Xfermode mode) { if (mXfermode != mode) { mXfermode = mode; - mColorMod = true; - applyColorMod(); + mHasXfermode = true; + applyXfermode(); invalidate(); } } @@ -1490,8 +1493,7 @@ public class ImageView extends View { if (mColorFilter != cf) { mColorFilter = cf; mHasColorFilter = true; - mColorMod = true; - applyColorMod(); + applyColorFilter(); invalidate(); } } @@ -1535,22 +1537,29 @@ public class ImageView extends View { alpha &= 0xFF; // keep it legal if (mAlpha != alpha) { mAlpha = alpha; - mColorMod = true; - applyColorMod(); + mHasAlpha = true; + applyAlpha(); invalidate(); } } - private void applyColorMod() { - // Only mutate and apply when modifications have occurred. This should - // not reset the mColorMod flag, since these filters need to be - // re-applied if the Drawable is changed. - if (mDrawable != null && mColorMod) { + private void applyXfermode() { + if (mDrawable != null && mHasXfermode) { mDrawable = mDrawable.mutate(); - if (mHasColorFilter) { - mDrawable.setColorFilter(mColorFilter); - } mDrawable.setXfermode(mXfermode); + } + } + + private void applyColorFilter() { + if (mDrawable != null && mHasColorFilter) { + mDrawable = mDrawable.mutate(); + mDrawable.setColorFilter(mColorFilter); + } + } + + private void applyAlpha() { + if (mDrawable != null && mHasAlpha) { + mDrawable = mDrawable.mutate(); mDrawable.setAlpha(mAlpha * mViewAlphaScale >> 8); } } |
