summaryrefslogtreecommitdiff
path: root/core/java/android/view/ViewOverlay.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view/ViewOverlay.java')
-rw-r--r--core/java/android/view/ViewOverlay.java20
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) {