am d00a76ea: am 7c79c82b: Merge "Don\'t cause requestLayout when transition changes Visibility." into mnc-dev

* commit 'd00a76eabe9603972b5d898fcee90c0a61c5e238':
  Don't cause requestLayout when transition changes Visibility.
This commit is contained in:
George Mount
2015-06-08 17:05:30 +00:00
committed by Android Git Automerger
3 changed files with 22 additions and 12 deletions

View File

@@ -445,7 +445,7 @@ public abstract class Visibility extends Transition {
mForcedEndVisibility != -1;
if (!isForcedVisibility) {
originalVisibility = viewToKeep.getVisibility();
viewToKeep.setVisibility(View.VISIBLE);
viewToKeep.setTransitionVisibility(View.VISIBLE);
}
Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues);
if (animator != null) {
@@ -454,7 +454,7 @@ public abstract class Visibility extends Transition {
animator.addListener(disappearListener);
addListener(disappearListener);
} else if (!isForcedVisibility) {
viewToKeep.setVisibility(originalVisibility);
viewToKeep.setTransitionVisibility(originalVisibility);
}
return animator;
}
@@ -516,14 +516,14 @@ public abstract class Visibility extends Transition {
@Override
public void onAnimationPause(Animator animation) {
if (!mCanceled && !mIsForcedVisibility) {
mView.setVisibility(mFinalVisibility);
mView.setTransitionVisibility(mFinalVisibility);
}
}
@Override
public void onAnimationResume(Animator animation) {
if (!mCanceled && !mIsForcedVisibility) {
mView.setVisibility(View.VISIBLE);
mView.setTransitionVisibility(View.VISIBLE);
}
}
@@ -557,7 +557,7 @@ public abstract class Visibility extends Transition {
if (mIsForcedVisibility) {
mView.setTransitionAlpha(0);
} else {
mView.setVisibility(mFinalVisibility);
mView.setTransitionVisibility(mFinalVisibility);
}
}
}

View File

@@ -39,7 +39,7 @@ public class GhostView extends View {
mView = view;
mView.mGhostView = this;
final ViewGroup parent = (ViewGroup) mView.getParent();
setGhostedVisibility(View.INVISIBLE);
mView.setTransitionVisibility(View.INVISIBLE);
parent.invalidate();
}
@@ -66,19 +66,15 @@ public class GhostView extends View {
super.setVisibility(visibility);
if (mView.mGhostView == this) {
int inverseVisibility = (visibility == View.VISIBLE) ? View.INVISIBLE : View.VISIBLE;
setGhostedVisibility(inverseVisibility);
mView.setTransitionVisibility(inverseVisibility);
}
}
private void setGhostedVisibility(int visibility) {
mView.mViewFlags = (mView.mViewFlags & ~View.VISIBILITY_MASK) | visibility;
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (!mBeingMoved) {
setGhostedVisibility(View.VISIBLE);
mView.setTransitionVisibility(View.VISIBLE);
mView.mGhostView = null;
final ViewGroup parent = (ViewGroup) mView.getParent();
if (parent != null) {

View File

@@ -8785,6 +8785,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
}
/**
* Change the visibility of the View without triggering any other changes. This is
* important for transitions, where visibility changes should not adjust focus or
* trigger a new layout. This is only used when the visibility has already been changed
* and we need a transient value during an animation. When the animation completes,
* the original visibility value is always restored.
*
* @param visibility One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}.
* @hide
*/
public void setTransitionVisibility(@Visibility int visibility) {
mViewFlags = (mViewFlags & ~View.VISIBILITY_MASK) | visibility;
}
/**
* Reset the flag indicating the accessibility state of the subtree rooted
* at this view changed.