30

साथ imageView करने ColorFilter लागू करना मैं एक ShapedDrawable करने के लिए सेट एक ImageViewandroid:src साथ, अर्थात् एक सफेद सर्कल की है। मैं चाहता हूं कि कुछ घटनाओं के जवाब में रनटाइम में इस ImageView को रंगीन करना है। imgView.setColorFilter समाधान प्रतीत होता है, लेकिन इसका उपयोग करने के बाद (विभिन्न मानकों का प्रयास किया गया) छवि अदृश्य हो जाती है (मुझे इसे स्क्रीन पर नहीं दिख रहा है)।ShapedDrawable

इसे कैसे हल करें? और क्या रंग मंडल रखने के बेहतर तरीके हैं?

+0

आप [इस संबंधित क्यू एंड ए] (http://stackoverflow.com/questions/4354939/understanding-the-use-of-colormatrix-and-colormatrixcolorfilter-to-modify-a-draw) दिलचस्प लग सकते हैं। –

+0

क्षमा करें, लेकिन मुझे इस प्रश्न से संबंधित कुछ भी नहीं मिला। – aplavin

+0

मुझे यकीन नहीं है कि आप स्वीकृत उत्तर कैसे प्राप्त नहीं कर सकते ... किसी भी तरह, यहां एक और समान विषय है: [लिंक] (http://stackoverflow.com/q/1309629/1029225)। जैसा कि सुझाव दिया गया है, कोशिश करें: 'imgView.setColorFilter (0xff00ffff, पोर्टरडफ.मोड.मल्टीप्ली); '। यदि यह आपकी आवश्यकताओं के अनुरूप नहीं है, तो वहां एक और परिष्कृत समाधान भी प्रस्तावित किया गया है। –

उत्तर

93

ठीक है, मैं इस के साथ एक त्वरित खेलने था और हलकों गायब होने का आपकी समस्या देखा। का वर्णन किए बिना आप बिल्कुल सही कोशिश करते हैं, मुझे लगता है कि आपने रंग फ़िल्टर को Drawable पर अभी तक सेट करने का प्रयास नहीं किया है? (ImageView के विपरीत, जो केवल BitmapDrawable के साथ काम करता है)।

ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview); 
ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview); 
ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview); 

// we can create the color values in different ways: 
redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 
greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY); 
blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY); 

ShapeDrawable संपूर्णता के लिए: (मैं आकार ImageView पर सेट है, नीचे देखें)

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > 
    <solid android:color="@android:color/white" /> 
</shape> 

निम्नलिखित बयान के साथ प्रारंभिक रंग के रूप में सफेद एक xml-घोषित ShapeDrawable के लिए बिल्कुल ठीक काम

और उदाहरण के रूप में ImageView रों में से एक:

<ImageView 
    android:id="@+id/circle_red_imageview" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:padding="5dp" 
    android:src="@drawable/circle_white" /> 

दृश्य परिणाम:

Screenshot of colored circles

+4

'ड्रायबल' पर 'mutable() 'को कॉल करने से ड्रॉबल्स की स्थिति को बनाए रखने में मदद मिलेगी। – Sufian

+0

वाह ने मुझे अभी बचाया है, आप निश्चित रूप से 'Drawable' पर फ़िल्टर लागू करना चाहते हैं, न कि केवल' ImageView'। – Maurizio

+0

क्या हम यहां सटीक रंग प्राप्त करते हैं जिसे हम यहां चुनते हैं, कॉलरफिल्टर (0xff00ff00, PorterDuff.Mode.MULTIPLY) यदि हम मूल रंग के रूप में सफेद का उपयोग करते हैं। यदि नहीं, तो हम सही रंग कैसे प्राप्त कर सकते हैं? – SadeepDarshana

11

आप बदलना चाहते हैं छवि रंग ऊपर के उदाहरण में

PorterDuff.Mode.SRC_ATOP instead 
PorterDuff.Mode.MULTIPLY 

का उपयोग करें।

+0

मुझे लगता है कि लेखक ने किसी भी फ़िल्टर के बारे में पूछा, न केवल SRC_ATOP या बहुतायत से। – kelin

5

आप एक्सएमएल में imageView में विशेषता android:tint उपयोग कर सकते हैं।

उदाहरण:

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

एंड्रॉयड 4.1.2 पर परीक्षण किया गया और 6.0.1

+0

अच्छा उत्तर चलाने की आवश्यकता नहीं है – marlonpya

+0

@marlonpya धन्यवाद! –

0

आप इस लाइब्रेरी का उपयोग कर यह बहुत बहुत ही सरल कर सकते हैं: https://github.com/jrvansuita/IconHandler

यह होगा इस तरह काम कर रहा है:

Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();