What would be the right way to turn a color Drawable into a grayscale one (to indicate disabled state)?
EDIT:
B/W => grayscale
Apparently you can use the ColorMatrix
class to do any sort of color-space transformations. It has a setSaturation()
method that easily creates a color-to-grayscale transformation (zeroes saturation) for you.
So, you can use that filter to paint a new copy of the image. I haven't tried this, but it should work:
Bitmap grayscaleBitmap = Bitmap.createBitmap(
colorBitmap.getWidth(), colorBitmap.getHeight(),
Bitmap.Config.RGB_565);
Canvas c = new Canvas(grayscaleBitmap);
Paint p = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm);
p.setColorFilter(filter);
c.drawBitmap(colorBitmap, 0, 0, p);