2016-08-05 52 views
3

在我的應用程序的一部分,我需要我的繪製R.drawable.blah進行過濾,以白色(原來爲紅色),所以我有這樣的方法:爲什麼可以在所有地方應用可繪製的濾色器?

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

,我使用這種方式:

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

問題是,現在繪圖在整個應用程序中變成了白色,甚至沒有應用過濾器。我希望drawable在應用程序的這個部分是白色的,但它在我使用它的每個地方。

我該如何解決?

+1

要修改的繪製,而不是一個副本複印件。你應該在你的資源中創建一個這個drawable的副本,例如,以解決你的問題 – ddb

回答

6

使用這種方法來代替,以確保你使用的你繪製

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

它就像一個魅力!感謝:D –

相關問題