diff options
Diffstat (limited to 'core/java/android/view/ViewOverlay.java')
| -rw-r--r-- | core/java/android/view/ViewOverlay.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java index 55109397f595..975931ae859c 100644 --- a/core/java/android/view/ViewOverlay.java +++ b/core/java/android/view/ViewOverlay.java @@ -15,6 +15,7 @@ */ package android.view; +import android.animation.LayoutTransition; import android.content.Context; import android.graphics.Canvas; import android.graphics.Rect; @@ -169,6 +170,14 @@ public class ViewOverlay { child.offsetTopAndBottom(parentLocation[1] - hostViewLocation[1]); } parent.removeView(child); + if (parent.getLayoutTransition() != null) { + // LayoutTransition will cause the child to delay removal - cancel it + parent.getLayoutTransition().cancel(LayoutTransition.DISAPPEARING); + } + // fail-safe if view is still attached for any reason + if (child.getParent() != null) { + child.mParent = null; + } } super.addView(child); } @@ -291,6 +300,17 @@ public class ViewOverlay { } } + /** + * @hide + */ + @Override + protected ViewParent invalidateChildInParentFast(int left, int top, Rect dirty) { + if (mHostView instanceof ViewGroup) { + return ((ViewGroup) mHostView).invalidateChildInParentFast(left, top, dirty); + } + return null; + } + @Override public ViewParent invalidateChildInParent(int[] location, Rect dirty) { if (mHostView != null) { |
