2011-11-19 18 views
18

पर एक रंग फ़िल्टर जोड़ना चाहता हूं, मैं ColorFilter से ImageView जोड़ना चाहता हूं।मैं imageview

वर्तमान में मैं उपयोग कर रहा हूँ:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter); 
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 

मैं में कई मोड देख लिया है PotterDuff ऐसे SRC_IN, SRC आदि, लेकिन मैं मोड में से किसी में कोई अंतर नहीं मिल रहा है ... सभी के रूप में मोड पूरे लाल रंग में पूरे ImageView बदल जाता है।

मैं मौजूदा छवि में लाल रंग मिश्रण करने के लिए इतना है कि छवि एक लाल रंग के साथ दिखेगा की जरूरत है ....

+2

ओह ... सही करने का सही तरीका है पोर्टरडफ.मोड.लाइटन ... –

+0

ऐसा इसलिए है क्योंकि कोई अल्फा चैनल नहीं है (यानी। पारदर्शिता) आपकी छवि में।आम तौर पर 'setColorFilter() 'का उपयोग आइकन को टेंट करने के लिए किया जाता है, और वास्तव में डिफ़ॉल्ट व्यवहार केवल अल्फा चैनल को संरक्षित करने वाली सभी छवियों को रंगीन करना है। 'PorterDuff.Mode.LIGHTEN' इसके बजाय चमक को संरक्षित करता है, इसलिए आपकी छवि के रंगीन भाग लाल हो जाते हैं, और सफेद वाले होते हैं जैसे वे होते हैं। –

उत्तर

25

ऐसा करने का सही तरीका PorterDuff.Mode.LIGHTEN का उपयोग कर रहा था।

तो अपडेट किए गए कोड किया जाएगा:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter); 
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN); 
+1

ऐसा इसलिए है क्योंकि आपकी छवि में कोई अल्फा चैनल (यानी पारदर्शिता) नहीं है। आम तौर पर 'setColorFilter() 'का उपयोग आइकन को टेंट करने के लिए किया जाता है, और वास्तव में डिफ़ॉल्ट व्यवहार केवल अल्फा चैनल को संरक्षित करने वाली सभी छवियों को रंगीन करना है। 'PorterDuff.Mode.LIGHTEN' इसके बजाय चमक को संरक्षित करता है, इसलिए आपकी छवि के रंगीन भाग लाल हो जाते हैं, और सफेद वाले होते हैं जैसे वे होते हैं। –

6

यह मेरे लिए काम किया: में

रेस/colors.xml:

int highlightColor = context.getResources().getColor(R.color.highlight_color_filter); 
PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(highlightColor, PorterDuff.Mode.SRC_ATOP); 

Paint redHighLight = new Paint(); 
redHighLight.setColorFilter(targetHitFilter); 
redHighLight.setAlpha(190); 

तो एपी:

<color name="highlight_color_filter">#A5FF0000</color> 
अपनी गतिविधि में

फिल्टर और प्रकाश डाला रंग प्रारंभ ImageView करने के लिए फिल्टर चलती हैं:

ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter); 
iv.setColorFilter(redHighLight); 

कि अगर imageView drawable के लिए आवेदन करने की कोशिश काम नहीं करता:

iv.getDrawable().setColorFilter(redHighLight); 

आशा व्यक्त की कि मदद करता है।

+0

कोई भी या कुछ भी नहीं होना चाहिए, लेकिन यहां एक बेहतर उत्तर है: http://stackoverflow.com/questions/10114420/applying-colorfilter-to-imageview-with-shapeddrawable – pgsandstrom

+10

यह संकलित नहीं होगा। रेड हाइलाइट है-एक पेंट कलरफिल्टर नहीं है। –

2

अन्य समाधान है, आप PorterDuff.Mode.SRC_ATOP मोड रखा जा सकता था और एक अन्य अल्फा का उपयोग एक पारदर्शी रंग है।

मैं अल्फा मूल्य के रूप में 155 का उपयोग करें:

final int semiTransparentGrey = Color.argb(155, 185, 185, 185); 
    drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP); 
+0

आप 155 एप्ला कैसे सेट करते हैं? – behelit

+0

उदाहरण के लिए या कोड में color.xml संसाधन के अंदर रंग को परिभाषित करने के लिए पहले argb मान को सेट करके आप सीधे अल्फा सेट कर सकते हैं। उदाहरण: int FILTERED_GREY = Color.argb (155, 185, 185, 185); –

+0

यह सही जवाब होना चाहिए! – GensaGames

5

आप एंड्रॉयड का उपयोग कर सकते हैं: आप xml फ़ाइल में टिंट (link)। उदाहरण:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/your_drawable" 
    android:tint="@color/your_color" /> 
+1

शीर्ष उत्तर होना चाहिए। जहां your_color इस तरह कुछ है; '' 'रंग का नाम =" your_color "> # 55000000' '' –

0

अपने xml फ़ाइल में आप उपयोगकर्ता टिंट उदाहरण के लिए

 <ImageView 
      android:id="@+id/scrachImage_1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:tint="@color/colorAccent" 
      android:src="@drawable/eagle" /> 

आप प्रोग्राम के रूप में रंग फ़िल्टर जोड़ना चाहते हैं तो

scratchImage_2.setColorFilter(Color.BLACK); 

उपयोग कर सकते हैं तुम भी हटा सकते हैं इस कोड का उपयोग कर इस रंग फ़िल्टर:

scratchImage_2.setColorFilter(null);

संबंधित मुद्दे