Android: Cloning a drawable in order to make a StateListDrawable with filters

If you apply a filter / etc to a drawable created with getConstantState().newDrawable() then all instances of that drawable will be changed as well, since drawables use the constantState as a cache!

So if you color a circle using a color filter and a newDrawable(), you will change the color of all the circles.

If you want to make this drawable updatable without affecting other instances then, then you must mutate that existing constant state.

// To make a drawable use a separate constant state
drawable.mutate()

For a good explanation see:

http://www.curious-creature.org/2009/05/02/drawable-mutations/

http://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate()


Try the following:

Drawable clone = drawable.getConstantState().newDrawable();

This is what works for me.

Drawable clone = drawable.getConstantState().newDrawable().mutate();