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

¿Fue útil?

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top