Disponibles => escala de grises
Pregunta
¿Cuál sería la forma correcta de tomar un color Disponibles en una escala de grises (para indicar el estado desactivado)?
EDIT:
B / W => escala de grises
Solución
Sé que esta pregunta se hizo hace un tiempo, pero me encontré con una solución más simple que funciona si usted tiene un Disponibles y sólo quieren mostrar ese mismo estirable en escala de grises. No es necesario tener un lienzo o un pintor ...
protected Drawable convertToGrayscale(Drawable drawable)
{
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);
return drawable;
}
Espero que esto ayude también!
Otros consejos
Al parecer, usted puede utilizar la clase ColorMatrix
para hacer cualquier tipo de transformaciones de espacio de color. Tiene un método setSaturation()
que crea fácilmente una transformación de color a escala de grises (ceros saturación) para usted.
Por lo tanto, se puede utilizar ese filtro para pintar una nueva copia de la imagen. No he probado esto, pero debería funcionar:
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);
Algunos comentarios a la contestación a @intgr.
1. Bitmap.Config.ARGB_8888
para preservar el canal alfa.
2. Un código de poco más:
//remember, you are converting a .png image, as opposed to a Drawable defined in .xml
Bitmap colorBitmap = ((BitmapDrawable)drawable).getBitmap();
// the code by intgr
Drawable grayscaleDrawable = new BitmapDrawable(grayscaleBitmap);
¿Está específicamente queriendo hacer esto mediante programación y no sólo con las versiones con discapacidad de las imágenes? Se podría hacer referencia a un dibujable XML, algo como:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item
android:drawable="@drawable/btn_default_normal_disable" />
</selector>