Вопрос

Как правильный способ превратить цвет, который можно втянуть в серого, чтобы указать состояние отключенного)?

РЕДАКТИРОВАТЬ:
B/w => Greyscale

Это было полезно?

Решение

Я знаю, что этот вопрос был задан некоторое время назад, но я наткнулся на более простое решение, которое работает, если у вас есть притяжение, и вы просто хотите отобразить то же самое, что и в Grayscale. Нет необходимости иметь холст или художник ...

protected Drawable convertToGrayscale(Drawable drawable)
{
    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0);

    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);

    drawable.setColorFilter(filter);

    return drawable;
}

Надеюсь, это тоже поможет!

Другие советы

Видимо вы можете использовать ColorMatrix Класс, чтобы выполнять какие-либо трансформации цветного пространства. Оно имеет setSaturation() Метод, который легко создает для вас цветовое преобразование (насыщение нулей).

Таким образом, вы можете использовать этот фильтр, чтобы нарисовать новую копию изображения. Я не пробовал это, но это должно работать:

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);

Некоторые комиссии на ответ @intgr.
1. Bitmap.Config.ARGB_8888 Чтобы сохранить альфа-канал.
2. Немного дополнительного кода:

//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);

Вы специально хотите сделать это программатически, а не только с отключенными версиями изображений? Вы можете ссылаться на рисование XML, что -то вроде:

<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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top