summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/java/android/graphics/drawable/VectorDrawable.java9
1 files changed, 6 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index 7b8dc52bc3b4..c855c4c6d17b 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -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;