// If we got here, we're recreating it. Mark it as such to ensure that
// we copy in child display lists into ours in drawChild()
mRecreateDisplayList = true;
-
if (mDisplayList == null) {
mDisplayList = mAttachInfo.mHardwareRenderer.createDisplayList(this);
// If we're creating a new display list, make sure our parent gets invalidated
mDisplayList.end();
}
+ } else {
+ mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
+ mPrivateFlags &= ~DIRTY_MASK;
}
return mDisplayList;
((ViewRoot) parent).invalidate();
parent = null;
} else if (view != null) {
- if ((mPrivateFlags & DRAWN) == DRAWN) {
+ if ((view.mPrivateFlags & DRAWN) == DRAWN ||
+ (view.mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) {
view.mPrivateFlags &= ~DRAWING_CACHE_VALID;
view.mPrivateFlags |= DIRTY;
parent = view.mParent;
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE_CHILD_IN_PARENT);
}
- if ((mPrivateFlags & DRAWN) == DRAWN) {
+ if ((mPrivateFlags & DRAWN) == DRAWN ||
+ (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) {
if ((mGroupFlags & (FLAG_OPTIMIZE_INVALIDATE | FLAG_ANIMATION_DONE)) !=
FLAG_OPTIMIZE_INVALIDATE) {
dirty.offset(location[CHILD_LEFT_INDEX] - mScrollX,