2015-02-26 24 views
6

Ho cercato post che rispondono a questo problema, ma nessuno di loro funziona per me, quindi penso di avere un fondamentale fraintendimento su come dovrebbe funzionare. Ho un ImageButton a cui è stato applicato un file png. Il png è per lo più trasparente ad eccezione di una freccia bianca. Voglio colorare la freccia rossa con setColorFilter:Android ImageButton setColorFilter non funziona

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

ma questo non ha alcun effetto. Ho provato la versione di setColorFilter con varie modalità Porter-Duff, ma nessuna di queste ha funzionato. Qualsiasi idea su quale potrebbe essere il problema o cosa potrei mancare sarebbe molto apprezzato.

risposta

10

È necessario ottenere il disegno dal pulsante poiché setColorFilter che si sta tentando di utilizzare (nella configurazione) si applica a quelli.

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

Finché si ha il corretto riferimento a un oggetto Drawable,

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

che nella sua xml:

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

è possibile utilizzare myDrawableObject.setColorFilter() per il tuo pieno piacere

Edit:

Per ImageButton, drawable per imageButton.getDrawable() corrispondono alle android:src="..." mentre imageButton.getBackground() corrispondono alla proprietà android:background="...". Assicurati di chiamare setColorFilter sul drawable corretto.

+1

Questo ha aiutato molto, ma ho dovuto usare PorterDuff.Mode.MULTIPLY - drawable.setColorFilter (Color.argb (225, 225, 0, 0), PorterDuff.Mode.MULTIPLY); – Ken

+0

Ottenere il drawable dalla vista stessa ha funzionato come un fascino. –

+0

Il tuo promemoria per accertarmi che stavo riferendo il drawable corretto mi ha aiutato a capire il mio problema: avevo impostato il mio drawable come "background" invece di "src" sul mio ImageView. – beyondtheteal