2015-02-26 9 views
6

Ich habe nach Posts gesucht, die dieses Problem lösen, aber keiner von ihnen funktioniert für mich, also denke ich, dass ich ein grundlegendes Missverständnis darüber habe, wie es funktionieren soll. Ich habe ein ImageButton, auf das eine PNG-Datei angewendet wurde. Das PNG ist größtenteils transparent mit Ausnahme eines weißen Pfeils. Ich möchte den Pfeil rot mit setColorFilter färben:Android ImageButton setColorFilter funktioniert nicht

imageButton.setColorFilter(Color.argb(255, 225, 0, 0)); 

aber dies hat keine Auswirkungen. Ich habe die Version von setColorFilter mit verschiedenen Porter-Duff-Modi ausprobiert, aber keiner von denen hat auch funktioniert. Irgendwelche Ideen, was das Problem sein könnte oder was ich vermisse, würden sehr geschätzt werden.

Antwort

10

Sie müssen die Drawable von der Schaltfläche abrufen, da der setColorFilter, den Sie verwenden möchten (in Ihrer Konfiguration) auf diese angewendet werden soll.

ImageButton btn = (ImageButton) myLayout.findViewByID(R.id.my_button); 

int mycolor = getResources().getColor(R.color.best_color); 

btn.getDrawable().setColorFilter(mycolor, PorterDuff.Mode.SRC_ATOP); 

Solange Sie die richtige Referenz auf ein Auslosungs Objekt haben,

e.g. textView.getCompoundDrawables()[2].setColorFilter(...);

das in seiner xml:

<TextView 
... 
android:drawableLeft="..." 
... 
/> 

Sie myDrawableObject.setColorFilter verwenden können(), um dein voller Geschmack.

Edit:

Für Image, die ziehbar für imageButton.getDrawable() entsprechen android:src="..." während imageButton.getBackground() zum android:background="..." Eigenschaft entsprechen. Stellen Sie sicher, dass Sie setColorFilter auf dem richtigen Zeichenfeld aufrufen.

+1

Das half sehr, aber ich musste PorterDuff.Mode.MULTIPLY verwenden - drawable.setColorFilter (Color.argb (225, 225, 0, 0), PorterDuff.Mode.MULTIPLY); – Ken

+0

Das Zeichnen von der Ansicht selbst funktionierte wie ein Charme. –

+0

Ihre Erinnerung, um sicherzustellen, dass ich auf das richtige Zeichenfeld referenzierte, half mir, mein Problem zu lösen - ich hatte meinen Zeichensatz als "Hintergrund" anstelle von "src" auf meinem ImageView gesetzt. – beyondtheteal

Verwandte Themen