summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2011-06-22 09:18:31 -0700
committerChet Haase <chet@google.com>2011-06-22 15:53:53 -0700
commitad4f70306b2089a273635b73a101fe48aa36cbe2 (patch)
treeed8fb993089e8b27401dabe4e3d64b37b5c3a6ea /graphics/java
parent8969d9924c662ab4cdacc342bbdc33756db730be (diff)
downloadframeworks_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.java7
-rw-r--r--graphics/java/android/graphics/drawable/TransitionDrawable.java14
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);