Drawable => Graustufen

Was wäre der richtige Weg, um eine Farbe zu zeichnen, die in eine Graustufe einzugreifen ist (um den deaktivierten Zustand anzuzeigen)?

BEARBEITEN:
B / W => Graustufen

  • Wie zeichne Text auf Leinwand?
  • Wie programmgesteuert man drawableRight auf Android Edittext?
  • Erstellen von Zeichen aus Bitmap
  • Optimierte Größe und dpi für Android App Bilder
  • Gibt es einen Grund für die Vorladung von Ziehbaren aus Ressourcen?
  • Android-Bibliothek über Override Ressource
  • Maskieren einer Zeichenkette / Bitmap auf Android
  • Erstellen Sie eine benutzerdefinierte Zeichenkette und verwenden Sie sie in XML
  • 4 Solutions collect form web for “Drawable => Graustufen”

    Ich weiß, dass diese Frage vor einer Weile gefragt wurde, aber ich stieß auf eine einfachere Lösung, die funktioniert, wenn Sie ein Drawable haben und Sie wollen nur das gleiche zeichen in Graustufen anzeigen. Keine Notwendigkeit, eine Leinwand oder einen Maler zu haben …

    protected Drawable convertToGrayscale(Drawable drawable) { ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); drawable.setColorFilter(filter); return drawable; } 

    Hoffe das hilft auch!

    Anscheinend können Sie die ColorMatrix Klasse verwenden, um irgendwelche Farbraum-Transformationen ColorMatrix . Es hat eine setSaturation() -Methode, die leicht eine Farb-zu-Graustufen-Transformation (Nullen Sättigung) für Sie erstellt.

    So können Sie diesen Filter verwenden, um eine neue Kopie des Bildes zu malen. Ich habe das nicht ausprobiert, aber es sollte funktionieren:

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

    Manche kommentiert die Antwort von @intgr.
    1. Bitmap.Config.ARGB_8888 , um den Alphakanal zu erhalten.
    2. Ein kleiner Extracode:

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

    Wollen Sie dies speziell programmieren und nicht nur mit deaktivierten Versionen der Bilder? Sie könnten auf ein XML zeichnen, so etwas wie:

     <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> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.