Как упомянутый выше Peter, если у Вас уже есть .cur файл, можно использовать его в качестве встроенного ресурса путем создания фиктивного элемента в разделе ресурса, и затем ссылки на курсор макета при необходимости в нем.
, Например, скажите, что Вы хотели отобразить нестандартные курсоры в зависимости от выбранного инструмента.
Добавляют к ресурсам:
<Window.Resources>
<ResourceDictionary>
<TextBlock x:Key="CursorGrab" Cursor="Resources/Cursors/grab.cur"/>
<TextBlock x:Key="CursorMagnify" Cursor="Resources/Cursors/magnify.cur"/>
</ResourceDictionary>
</Window.Resources>
Пример встроенного курсора сослался в коде:
if (selectedTool == "Hand")
myCanvas.Cursor = ((TextBlock)this.Resources["CursorGrab"]).Cursor;
else if (selectedTool == "Magnify")
myCanvas.Cursor = ((TextBlock)this.Resources["CursorMagnify"]).Cursor;
else
myCanvas.Cursor = Cursor.Arrow;
-Ben
Очевидно, вы можете использовать класс 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);
Вы хотите сделать это программно, а не только с отключенными версиями образов? Вы можете ссылаться на 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>
Некоторые комментарии к ответу @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);