diff options
-rw-r--r-- | core/java/android/view/ViewGroup.java | 26 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 2 |
2 files changed, 16 insertions, 12 deletions
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 044627c..6ec0955 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -4100,21 +4100,23 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final int left = mLeft; final int top = mTop; - if ((mGroupFlags & FLAG_CLIP_CHILDREN) != FLAG_CLIP_CHILDREN || - dirty.intersect(0, 0, mRight - left, mBottom - top) || - (mPrivateFlags & DRAW_ANIMATION) == DRAW_ANIMATION) { - mPrivateFlags &= ~DRAWING_CACHE_VALID; - - location[CHILD_LEFT_INDEX] = left; - location[CHILD_TOP_INDEX] = top; - - if (mLayerType != LAYER_TYPE_NONE) { - mPrivateFlags |= INVALIDATED; - mLocalDirtyRect.union(dirty); + if ((mGroupFlags & FLAG_CLIP_CHILDREN) == FLAG_CLIP_CHILDREN) { + if (!dirty.intersect(0, 0, mRight - left, mBottom - top)) { + dirty.setEmpty(); } + } + mPrivateFlags &= ~DRAWING_CACHE_VALID; + + location[CHILD_LEFT_INDEX] = left; + location[CHILD_TOP_INDEX] = top; - return mParent; + if (mLayerType != LAYER_TYPE_NONE) { + mPrivateFlags |= INVALIDATED; + mLocalDirtyRect.union(dirty); } + + return mParent; + } else { mPrivateFlags &= ~DRAWN & ~DRAWING_CACHE_VALID; diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 6959b84..ad850da 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -870,6 +870,8 @@ public final class ViewRootImpl implements ViewParent, if (dirty == null) { invalidate(); return null; + } else if (dirty.isEmpty()) { + return null; } if (mCurScrollY != 0 || mTranslator != null) { |