2016-08-05 19 views
3

In einem Abschnitt meiner app, die ich brauche, um meine ziehbar R.drawable.blah auf weiße Farbe gefiltert werden (ursprünglich rot), so habe ich diese Methode:Warum wird ein ziehbarer Farbfilter an allen Stellen angewendet?

public final static Drawable getFilteredDrawable(Context context, @DrawableRes int drawable, @ColorRes int color) { 
    Drawable d = ContextCompat.getDrawable(context, drawable); 
    d.setColorFilter(ContextCompat.getColor(context, color), PorterDuff.Mode.SRC_IN); 
    return d; 
} 

und ich benutze es auf diese Weise:

DrawableUtil.getFilteredDrawable(this, R.drawable.blah, android.R.color.white); 

Problem ist, dass jetzt das Zeichen in der ganzen App weiß wird, selbst wenn man den Filter nicht anwendet. Ich möchte, dass das Zeichen in diesem Bereich der App weiß ist, aber stattdessen wird es an jeder Stelle verwendet.

Wie kann ich es lösen?

+1

Sie verwenden werden die ziehbar ändern, nicht eine Kopie. Sie sollten eine Kopie dieses Drawable in Ihren Ressourcen erstellen, zum Beispiel, um Ihr Problem zu lösen – ddb

Antwort

6

Verwendung dieses Verfahren statt, um sicherzustellen, dass Sie eine Kopie Ihrer ziehbar

public final static Drawable getFilteredDrawable(Context context, @DrawableRes int drawable, @ColorRes int color) { 
    Drawable d = ContextCompat.getDrawable(context, drawable).getConstantState().newDrawable().mutate(); //so we are sure we are using a copy of the original drawable 
    d.setColorFilter(ContextCompat.getColor(context, color), PorterDuff.Mode.SRC_IN); 
    return d; 
} 
+0

Es funktioniert wie ein Charme! Danke: D –