Merge "Mutate the drawable if a valid state change happen" into nyc-dev

This commit is contained in:
Tenghui Zhu
2016-06-30 23:12:37 +00:00
committed by Android (Google) Code Review

View File

@@ -240,9 +240,7 @@ public class VectorDrawable extends Drawable {
* constructors to set the state and initialize local properties. * constructors to set the state and initialize local properties.
*/ */
private VectorDrawable(@NonNull VectorDrawableState state, @Nullable Resources res) { private VectorDrawable(@NonNull VectorDrawableState state, @Nullable Resources res) {
// Constant state sharing is disabled until we fix onStateChanged() mVectorState = state;
// affecting the shared bitmap.
mVectorState = new VectorDrawableState(state);
updateLocalState(res); updateLocalState(res);
} }
@@ -388,6 +386,11 @@ public class VectorDrawable extends Drawable {
protected boolean onStateChange(int[] stateSet) { protected boolean onStateChange(int[] stateSet) {
boolean changed = false; boolean changed = false;
// When the VD is stateful, we need to mutate the drawable such that we don't share the
// cache bitmap with others. Such that the state change only affect this new cached bitmap.
if (isStateful()) {
mutate();
}
final VectorDrawableState state = mVectorState; final VectorDrawableState state = mVectorState;
if (state.onStateChange(stateSet)) { if (state.onStateChange(stateSet)) {
changed = true; changed = true;