Update locally cached drawables when constant state changes

Previously we were failing to update references to drawables that had
been pulled from constant state, so we were drawing the wrong ones.

Also fixes button Z translation on press, which was WAY too high.

BUG: 18542282
Change-Id: Ifde7d64e31d31737854cfcbe75777e5b07a06e3a
This commit is contained in:
Alan Viverette
2014-12-04 12:54:46 -08:00
parent 70941f203c
commit ebc9f2e773
3 changed files with 19 additions and 2 deletions

View File

@@ -54,19 +54,20 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
private DrawableContainerState mDrawableContainerState;
private Rect mHotspotBounds;
private Drawable mCurrDrawable;
private Drawable mLastDrawable;
private int mAlpha = 0xFF;
/** Whether setAlpha() has been called at least once. */
private boolean mHasAlpha;
private int mCurIndex = -1;
private int mLastIndex = -1;
private boolean mMutated;
// Animations.
private Runnable mAnimationRunnable;
private long mEnterAnimationEnd;
private long mExitAnimationEnd;
private Drawable mLastDrawable;
// overrides from Drawable
@@ -255,6 +256,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
if (mLastDrawable != null) {
mLastDrawable.jumpToCurrentState();
mLastDrawable = null;
mLastIndex = -1;
changed = true;
}
if (mCurrDrawable != null) {
@@ -426,9 +428,11 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
}
if (mCurrDrawable != null) {
mLastDrawable = mCurrDrawable;
mLastIndex = mCurIndex;
mExitAnimationEnd = now + mDrawableContainerState.mExitFadeDuration;
} else {
mLastDrawable = null;
mLastIndex = -1;
mExitAnimationEnd = 0;
}
} else if (mCurrDrawable != null) {
@@ -522,6 +526,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
if (mExitAnimationEnd <= now) {
mLastDrawable.setVisible(false, false);
mLastDrawable = null;
mLastIndex = -1;
mExitAnimationEnd = 0;
} else {
int animAlpha = (int)((mExitAnimationEnd-now)*255)
@@ -1103,5 +1108,13 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
protected void setConstantState(DrawableContainerState state) {
mDrawableContainerState = state;
// The locally cached drawables may have changed.
if (mCurIndex >= 0) {
mCurrDrawable = state.getChild(mCurIndex);
}
if (mLastIndex >= 0) {
mLastDrawable = state.getChild(mLastIndex);
}
}
}