diff options
author | Chet Haase <chet@google.com> | 2011-06-22 09:18:31 -0700 |
---|---|---|
committer | Chet Haase <chet@google.com> | 2011-06-22 15:53:53 -0700 |
commit | ad4f70306b2089a273635b73a101fe48aa36cbe2 (patch) | |
tree | ed8fb993089e8b27401dabe4e3d64b37b5c3a6ea /graphics/java | |
parent | 8969d9924c662ab4cdacc342bbdc33756db730be (diff) | |
download | frameworks_base-ad4f70306b2089a273635b73a101fe48aa36cbe2.zip frameworks_base-ad4f70306b2089a273635b73a101fe48aa36cbe2.tar.gz frameworks_base-ad4f70306b2089a273635b73a101fe48aa36cbe2.tar.bz2 |
Fix flashing artifacts caused by invalidation bugs
Therea re 2 fixes here:
- We sometimes cleared a flag in ViewAncestor too soon that controlled
how invalidated areas were redrawn (related to whether the invalidates
happened on opaque views or not).
- TransitionDrawable was always setting/restoring alpha values on its
drawables every time it was drawn. setAlpha on BitmapDrawable causes
an invalidation, so essentially this was an infinite invalidation/redrawing
loop. The fix was to notice when the animation was done and to simply
draw the appropriate drawable[s].
Change-Id: I1849a5a909b0039a0e9bce0aa3cfc33c50f8f854
Diffstat (limited to 'graphics/java')
-rw-r--r-- | graphics/java/android/graphics/drawable/BitmapDrawable.java | 7 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/TransitionDrawable.java | 14 |
2 files changed, 18 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java index a4734ff..7e03e1c 100644 --- a/graphics/java/android/graphics/drawable/BitmapDrawable.java +++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java @@ -405,8 +405,11 @@ public class BitmapDrawable extends Drawable { @Override public void setAlpha(int alpha) { - mBitmapState.mPaint.setAlpha(alpha); - invalidateSelf(); + int oldAlpha = mBitmapState.mPaint.getAlpha(); + if (alpha != oldAlpha) { + mBitmapState.mPaint.setAlpha(alpha); + invalidateSelf(); + } } @Override diff --git a/graphics/java/android/graphics/drawable/TransitionDrawable.java b/graphics/java/android/graphics/drawable/TransitionDrawable.java index 9a3ca40..483fa56 100644 --- a/graphics/java/android/graphics/drawable/TransitionDrawable.java +++ b/graphics/java/android/graphics/drawable/TransitionDrawable.java @@ -187,8 +187,20 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba final int alpha = mAlpha; final boolean crossFade = mCrossFade; final ChildDrawable[] array = mLayerState.mChildren; - Drawable d; + if (done) { + // the setAlpha() calls below trigger invalidation and redraw. If we're done, just draw + // the appropriate drawable[s] and return + if (!crossFade || alpha == 0) { + array[0].mDrawable.draw(canvas); + } + if (alpha == 0xFF) { + array[1].mDrawable.draw(canvas); + } + return; + } + + Drawable d; d = array[0].mDrawable; if (crossFade) { d.setAlpha(255 - alpha); |