Mutate the drawable if a valid state change happen

In another word, create another cached bitmap, when the current VectorDrawable
will look differently when state changed.

Bug: 29870392
Bug: 29854240

Change-Id: I7a5ef91091e547a930368286defc7ab96aeb9471
(cherry picked from commit 4f1acfb5f5)
This commit is contained in:
Teng-Hui Zhu
2016-06-29 16:56:40 -07:00
committed by Ian Pedowitz
parent a6a3ca8dac
commit ab1cbc2c53

View File

@@ -240,9 +240,7 @@ public class VectorDrawable extends Drawable {
* constructors to set the state and initialize local properties.
*/
private VectorDrawable(@NonNull VectorDrawableState state, @Nullable Resources res) {
// Constant state sharing is disabled until we fix onStateChanged()
// affecting the shared bitmap.
mVectorState = new VectorDrawableState(state);
mVectorState = state;
updateLocalState(res);
}
@@ -388,6 +386,11 @@ public class VectorDrawable extends Drawable {
protected boolean onStateChange(int[] stateSet) {
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;
if (state.onStateChange(stateSet)) {
changed = true;