diff options
author | Chet Haase <chet@google.com> | 2011-01-25 09:37:18 -0800 |
---|---|---|
committer | Chet Haase <chet@google.com> | 2011-01-26 22:44:52 -0800 |
commit | 678e0adbdbac5fa3f25ca8371fdff1b3182f67e9 (patch) | |
tree | b2e047fff8eaac69b0b3d0e4b4323d8a067d3e11 /core/java | |
parent | e193c4688f9062e1d4dba97413788b6ffa122a55 (diff) | |
download | frameworks_base-678e0adbdbac5fa3f25ca8371fdff1b3182f67e9.zip frameworks_base-678e0adbdbac5fa3f25ca8371fdff1b3182f67e9.tar.gz frameworks_base-678e0adbdbac5fa3f25ca8371fdff1b3182f67e9.tar.bz2 |
Fix display List bugs
Various property setters in View need to invalidate the parent's
cache to get redrawn properly when accelerated with display lists.
Also, fix logic around display lists and old-style Animations in
ViewGroup.
Change-Id: I70e1c2fa49e62228ee4a1301a006ce50bda4c305
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/view/View.java | 13 | ||||
-rw-r--r-- | core/java/android/view/ViewGroup.java | 19 |
2 files changed, 22 insertions, 10 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 2e6664b..e2c346f 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -2937,13 +2937,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } /** - * Gets the current list of listeners for layout changes. - */ - public List<OnLayoutChangeListener> getOnLayoutChangeListeners() { - return mOnLayoutChangeListeners; - } - - /** * Returns the focus-change callback registered for this view. * * @return The callback, or null if one is not registered. @@ -6011,6 +6004,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility invalidate(true); } mBackgroundSizeChanged = true; + invalidateParentIfNeeded(); } } @@ -6077,6 +6071,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility invalidate(true); } mBackgroundSizeChanged = true; + invalidateParentIfNeeded(); } } @@ -6137,6 +6132,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility invalidate(true); } mBackgroundSizeChanged = true; + invalidateParentIfNeeded(); } } @@ -6194,6 +6190,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility invalidate(true); } mBackgroundSizeChanged = true; + invalidateParentIfNeeded(); } } @@ -6438,6 +6435,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility mPrivateFlags |= DRAWN; // force another invalidation with the new orientation invalidate(false); } + invalidateParentIfNeeded(); } } @@ -6476,6 +6474,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility mPrivateFlags |= DRAWN; // force another invalidation with the new orientation invalidate(false); } + invalidateParentIfNeeded(); } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 9e5b23c..d4efdb6 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -17,6 +17,7 @@ package android.view; import android.animation.LayoutTransition; +import android.view.animation.AlphaAnimation; import com.android.internal.R; import com.android.internal.util.Predicate; @@ -2364,6 +2365,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager DisplayList displayList = null; Bitmap cache = null; + boolean hasDisplayList = false; if (caching) { if (!canvas.isHardwareAccelerated()) { if (layerType != LAYER_TYPE_NONE) { @@ -2376,12 +2378,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager child.buildDrawingCache(true); cache = child.getDrawingCache(true); } else if (layerType == LAYER_TYPE_NONE) { - displayList = child.getDisplayList(); + // Delay getting the display list until animation-driven alpha values are + // set up and possibly passed on to the view + hasDisplayList = true; } } } - final boolean hasDisplayList = displayList != null && displayList.isReady(); final boolean hasNoCache = cache == null || hasDisplayList; final int restoreTo = canvas.save(); @@ -2472,6 +2475,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + if (hasDisplayList) { + displayList = child.getDisplayList(); + } + if (hasNoCache) { boolean layerRendered = false; if (layerType == LAYER_TYPE_HARDWARE) { @@ -2529,7 +2536,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager canvas.restoreToCount(restoreTo); if (a != null && !more) { - child.onSetAlpha(255); + if (!canvas.isHardwareAccelerated() && !a.getFillAfter()) { + child.onSetAlpha(255); + } finishAnimatingView(child, a); } @@ -2538,6 +2547,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // display lists to render, force an invalidate to allow the animation to // continue drawing another frame invalidate(); + if (a instanceof AlphaAnimation) { + // alpha animations should cause the child to recreate its display list + child.invalidate(); + } } child.mRecreateDisplayList = false; |