2013-09-23 5 views
27

काम नहीं कर रहा है मैं काले छवि को एक सफेद छवि में बदलने के लिए एक छविदृश्य पर एक साधारण रंगफिल्टर को लागू करने की कोशिश कर रहा हूं। आदेश प्राप्त करने के लिए निम्नलिखित है कि मुझे क्या करना है:setColorFilter

weatherImg.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY); 
    weatherImg.setImageResource(R.drawable.b_clouded_rain); 

मैं भी लाल और सफेद लेकिन उन सभी को कोई असर नहीं रंग फिल्टर में रंग में परिवर्तित करने के लिए कोशिश की है, क्या मैं गलत कर रहा हूँ?

उत्तर

66

जितना मैं अपने ही सवाल मैं इस समस्या पाया जवाब देने के लिए नफरत के रूप में: मैं का उपयोग किया है चाहिए:

weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); 
+7

'PorterDuff.Mode.SRC_ATOP' यह डिफ़ॉल्ट रूप से प्रयोग किया जाता,' weatherImg.setColorFilter (Color.WHITE) है 'भी काम करेगा, एस 4 4.4.4 पर) – GuilhE

21

यह छानने की किस तरह आप लागू करना चाहते पर निर्भर करता है। yout उस पर ट्रांसपरेंसिस के साथ एक छवि पर एक नया रंग लागू करने के लिए चाहते हैं, कि क्या मेरे लिए काम किया है:

weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); 

आप इस PorterDuff फ़िल्टर के बारे में अधिक जानने के लिए चाहते हैं, तो मैं एक goog लेख है कि मुझे समझने में मदद मिली: http://www.ibm.com/developerworks/java/library/j-mer0918/ इसे एक पठन दें :)

14

एंड्रॉइड 6 पर एक ही समस्या थी। ImageView.setColorFilter() के बजाय ImageView.getDrawable().setColorFilter() का उपयोग करके हल किया गया।

2

मैं एक सैमसंग S3 पर setColorFilter के साथ मुद्दों 4.3 चल रहा है और एक ही रास्ता मैं काम करने के लिए फिल्टर मिल सकता है draw(Canvas canvas) विधि में इसे लागू करने के द्वारा किया गया हो रही थी:

public class ColouredDrawable extends BitmapDrawable { 

private ColorFilter mColorFilter; 

public ColouredDrawable(Bitmap toTransform, int toColour, Resources resources) { 
    super(resources, toTransform); 
    float[] matrix = { 
      0, 0, 0, 0, ((toColour & 0xFF0000)/0xFFFF), 
      0, 0, 0, 0, ((toColour & 0xFF00)/0xFF), 
      0, 0, 0, 0, (toColour & 0xFF), 
      0, 0, 0, 1, 0 }; 
    mColorFilter = new ColorMatrixColorFilter(matrix); 
} 

@Override 
public void draw(Canvas canvas) { 
    setColorFilter(mColorFilter); 
    super.draw(canvas); 
} 

सरल BitmapDrawable didn करने के लिए आवेदन करने वाले setColorFilter ऐसा कोई प्रतीत नहीं होता है।

+0

एक ही समस्या है। – Simas

+0

4.3 और 4.4.4 पर 2 सैमसंग उपकरणों के साथ यहाँ! यह वास्तव में बुरा है! – sud007

+1

लॉलीपॉप से ​​पहले एंड्रॉइड पर यहाँ। NinePatchDrawable भी प्रभावित है। मैंने ड्रॉइंग क्लास को ओवरराइड करके और रंग विधि को ड्रॉ विधि में पेंट ऑब्जेक्ट पर सेट करके हल किया: @ ओवरराइड सार्वजनिक शून्य ड्रा (कैनवास कैनवास) { getPaint()। SetColorFilter (your_colorFilter); super.draw (कैनवास); } – Venator85

1

मेरे लिए केवल इस समाधान काम किया: अगर R.drawable.img वेक्टर छवि है, और रेखापुंज संसाधन

3

हम इस कोड

Drawable drawable = DrawableCompat.wrap(getDrawable(drawableResource)); 
     drawable.mutate(); 
     DrawableCompat.setTint(drawable, getColor(color)); 
     drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 

public static int getColor(int id) { 
     return ContextCompat.getColor(getInstance().context, id); 
    } 

public static Drawable getDrawable(int id) { 
     return ContextCompat.getDrawable(getInstance().context, id); 
    } 
0

का उपयोग Android के लिए के लिए कोई प्रभाव नहीं है

image.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY); 
image.setImageResource(R.drawable.img); 

फ़िल्टर लागू होता है 4.3 और 4.4, सेटकॉलरफिल्टर काम नहीं करता है। इसके बजाय DrawableCompat का उपयोग करें।

val drawable = DrawableCompat.wrap(ContextCompat.getDrawable(
      context, 
      R.drawable.b_clouded_rain)); 
    DrawableCompat.setTint(drawable, foregroundColor); 
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN) 
      .setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY); 

    weatherImg.setImageResource(R.drawable.b_clouded_rain); 
संबंधित मुद्दे