एक छवि दृश्य के लिए टिंट सेट करने की आवश्यकता है ... मैं इसे निम्नलिखित तरीके से उपयोग कर रहा हूं:
imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);
लेकिन यह नहीं बदलता है ...
एक छवि दृश्य के लिए टिंट सेट करने की आवश्यकता है ... मैं इसे निम्नलिखित तरीके से उपयोग कर रहा हूं:
imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);
लेकिन यह नहीं बदलता है ...
जवाबों:
आप आसानी से कोड में टिंट को बदल सकते हैं:
imageView.setColorFilter(Color.argb(255, 255, 255, 255));
// सफेद टिंट
अगर आपको कलर टिंट चाहिए
imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.MULTIPLY);
वेक्टर ड्रा के लिए
imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.SRC_IN);
अद्यतन करें :
@ADev के पास अपने उत्तर में नया समाधान है , लेकिन उसके समाधान के लिए नए समर्थन पुस्तकालय - 25.4.0 या इसके बाद के संस्करण की आवश्यकता है।
android:tint
सभी Android संस्करणों पर काम करता है। शायद आप बात कर रहे हैं drawableTint
?
अधिकांश उत्तर का उपयोग करने का संदर्भ है setColorFilter
जो मूल रूप से नहीं पूछा गया था।
उपयोगकर्ता @Tad का उत्तर सही दिशा में है, लेकिन यह केवल API 21+ पर काम करता है।
सभी Android संस्करणों पर टिंट सेट करने के लिए, ImageViewCompat
निम्न का उपयोग करें :
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));
ध्यान दें कि yourTint
इस मामले में "रंग इंट" होना चाहिए। यदि आपके पास एक रंग संसाधन है R.color.blue
, तो आपको पहले रंग को लोड करना होगा:
ContextCompat.getColor(context, R.color.blue);
ImageView
AppCompat विषय के साथ या AppCompatImageView
उपवर्गों पर xml इंस्टेंस पर काम करता है ।
इसने मेरे लिए काम किया
mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));
mImageView.setColorFilter(getContext().getResources().getColor(R.color.green_500));
@ हार्दिक के पास यह अधिकार है। आपके कोड में अन्य त्रुटि तब होती है जब आप अपने एक्सएमएल-परिभाषित रंग का संदर्भ देते हैं। आपने setColorFilter
विधि को केवल आईडी पास किया , जब आपको रंग संसाधन का पता लगाने के लिए आईडी का उपयोग करना चाहिए, और संसाधन को setColorFilter
विधि को पास करना चाहिए । नीचे अपने मूल कोड को फिर से लिखना।
यदि यह रेखा आपकी गतिविधि के भीतर है:
imageView.setColorFilter(getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);
और, आपको अपनी मुख्य गतिविधि का संदर्भ देना होगा:
Activity main = ...
imageView.setColorFilter(main.getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);
ध्यान दें कि यह स्ट्रिंग के अलावा अन्य प्रकार के संसाधनों, जैसे पूर्णांक, बूल, आयाम आदि के बारे में भी सच है, जिसके लिए आप getString()
पहली कॉल करने की आवश्यकता के बिना सीधे अपनी गतिविधि में उपयोग कर सकते हैं getResources()
(मुझसे पूछें क्यों नहीं) ।
अन्यथा, आपका कोड अच्छा लग रहा है। (हालांकि मैंने इस setColorFilter
विधि की बहुत अधिक जांच नहीं की है ...)
लॉलीपॉप से शुरुआत करते हुए, बिटमैपड्रैबल्स के लिए एक टिंट विधि भी है जो नए पैलेट वर्ग के साथ काम करती है:
सार्वजनिक शून्य setTintList (ColorStateList टिंट)
तथा
सार्वजनिक शून्य सेटटिंटमोड (पोर्टरडफ.मोड टिंटमोड)
Android के पुराने संस्करणों पर, आप अब ड्राएबल.कॉम लाइब्रेरी का उपयोग कर सकते हैं
इसे इस्तेमाल करे। यह सभी एंड्रॉइड संस्करणों पर काम करना चाहिए जो समर्थन पुस्तकालय का समर्थन करता है:
public static Drawable getTintedDrawableOfColorResId(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorRes int colorResId) {
return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), ContextCompat.getColor(context, colorResId));
}
public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorInt int color) {
return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), color);
}
public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) {
Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable);
DrawableCompat.setTint(wrapDrawable, color);
DrawableCompat.setTintMode(wrapDrawable, PorterDuff.Mode.SRC_IN);
return wrapDrawable;
}
आप इसे काम करने के लिए उपरोक्त में से किसी का उपयोग कर सकते हैं।
आप डॉक्स के बारे में अधिक रोचक विशेषताओं के बारे में डॉक्स पर पढ़ सकते हैं, यहां ।
imageView.getBackground()
ड्रॉ करने योग्य होने के लिए भी करना पड़ा , क्योंकि imageView.getDrawable()
वह अशक्त लौट रहा था।
ADev के लिए बेहतर सरलीकृत विस्तार समारोह धन्यवाद
fun ImageView.setTint(@ColorRes colorRes: Int) {
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(ContextCompat.getColor(context, colorRes)))
}
उपयोग: -
imageView.setTint(R.color.tintColor)
यदि आपके रंग में हेक्स पारदर्शिता है, तो नीचे दिए गए कोड का उपयोग करें।
ImageViewCompat.setImageTintMode(imageView, PorterDuff.Mode.SRC_ATOP);
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(Color.parseColor("#80000000")));
टिंट साफ़ करने के लिए
ImageViewCompat.setImageTintList(imageView, null);
img
ImageView का प्रकार है।
सरल और एक पंक्ति
imageView.setColorFilter(activity.getResources().getColor(R.color.your_color));
पहले जवाब के रूप में मेरे लिए काम नहीं किया:
//get ImageView
ImageView myImageView = (ImageView) findViewById(R.id.iv);
//colorid is the id of a color defined in values/colors.xml
myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid)));
यह केवल एपीआई 21+ में काम करता है, लेकिन मेरे लिए यह एक मुद्दा नहीं था। आप उस समस्या को हल करने के लिए एक ImageViewCompat का उपयोग कर सकते हैं, थ।
मुझे आशा है कि मैंने किसी की मदद की :-)
लॉलीपॉप में शुरुआत, एक ऐसी विधि है जिसे ImageView#setImageTintList()
आप उपयोग कर सकते हैं ... इसका फायदा यह है कि यह ColorStateList
केवल एक रंग के विपरीत है, इस प्रकार छवि की टिंट स्थिति को जागरूक करता है।
प्री-लॉलीपॉप डिवाइसों पर, आप ड्रॉबल को टिन करके और फिर इसे ड्रॉअर ड्रॉअर के रूप में सेट करके समान व्यवहार प्राप्त कर सकते हैं ImageView
:
ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_clr_selector);
Drawable drawable = DrawableCompat.wrap(imageView.getDrawable());
DrawableCompat.setTintList(drawable, csl);
imageView.setImageDrawable(drawable);
Random random=new Random;
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
ColorFilter cf = new PorterDuffColorFilter(Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255)),Mode.OVERLAY);
imageView.setImageResource(R.drawable.ic_bg_box);
imageView.setColorFilter(cf);
Android में प्रोग्राम छवि के लिए सेट टिंट के लिए
मेरे पास Android के लिए दो तरीके हैं:
1)
imgView.setColorFilter(context.getResources().getColor(R.color.blue));
2)
DrawableCompat.setTint(imgView.getDrawable(),
ContextCompat.getColor(context, R.color.blue));
मुझे आशा है कि मैंने किसी की मदद की :-)
Kotev के व्यापक रूप से गोद लेने और इसके उपयोगी विस्तार कार्यों के बाद से ADev के उत्तर (जो मेरी राय में सबसे सही है) को जोड़ना :
fun ImageView.setTint(context: Context, @ColorRes colorId: Int) {
val color = ContextCompat.getColor(context, colorId)
val colorStateList = ColorStateList.valueOf(color)
ImageViewCompat.setImageTintList(this, colorStateList)
}
मुझे लगता है कि यह एक फ़ंक्शन है जो किसी भी एंड्रॉइड प्रोजेक्ट में होना उपयोगी हो सकता है!
मैंने पाया कि हम रंग चयनकर्ता का उपयोग टिंट एटर के लिए कर सकते हैं:
mImageView.setEnabled(true);
activity_main.xml:
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_arrowup"
android:tint="@color/section_arrowup_color" />
section_arrowup_color.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_enabled="true"/>
<item android:color="@android:color/black" android:state_enabled="false"/>
<item android:color="@android:color/white"/>
</selector>
app:srcCompat
इसके बजाय का उपयोग करें android:src
, और अपने build.gradle फ़ाइल vectorDrawables.useSupportLibrary = true
के defaultConfig
हिस्से में जोड़ें । किटकैट एमुलेटर पर ठीक काम करने के लिए परीक्षण किया गया।
उपयोग न करें PoterDuff.Mode
, setColorFilter()
इसका उपयोग करें यह सभी के लिए काम करता है।
ImageView imageView = (ImageView) listItem.findViewById(R.id.imageView);
imageView.setColorFilter(getContext().getResources().getColor(R.color.msg_read));
मुझे पार्टी में देर हो रही है लेकिन मैंने ऊपर अपना सॉल्यूशन नहीं देखा। हम के माध्यम से रंग रंग सेट करने में सक्षम हैं setImageResource()
, भी (मेरे minSdkVersion 24 है)।
तो, सबसे पहले, आपको एक चयनकर्ता बनाने और इसे /drawable
संपत्ति फ़ोल्डर में सहेजने की आवश्यकता है (मैं इसे कॉल करता हूं ic_color_white_green_search.xml
)
<!-- Focused and not pressed -->
<item android:state_focused="true"
android:state_pressed="false">
<bitmap android:src="@drawable/ic_search"
android:tint="@color/branding_green"/>
</item>
<!-- Focused and pressed -->
<item android:state_focused="true"
android:state_pressed="true">
<bitmap android:src="@drawable/ic_search"
android:tint="@color/branding_green"/>
</item>
<!-- Default -->
<item android:drawable="@drawable/ic_search"/>
फिर इसे इस तरह कोड में सेट करें:
val icon = itemView.findViewById(R.id.icon) as ImageButton
icon.setImageResource(R.drawable.ic_color_white_green_search)
यदि आप चयनकर्ता को अपने टिंट में सेट करना चाहते हैं:
ImageViewCompat.setImageTintList(iv, getResources().getColorStateList(R.color.app_icon_click_color));
विस्तार समारोह का उपयोग कर कोटलिन समाधान, टिन्टिंग को सेट और परेशान करने के लिए:
fun ImageView.setTint(@ColorInt color: Int?) {
if (color == null) {
ImageViewCompat.setImageTintList(this, null)
return
}
ImageViewCompat.setImageTintMode(this, PorterDuff.Mode.SRC_ATOP)
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(color))
}
सटीक उत्तर नहीं बल्कि एक सरल विकल्प:
यहाँ इसके लिए एक स्निपेट दिया गया है:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/height120"
android:contentDescription="@string/my_description"
android:scaleType="fitXY"
android:src="@drawable/my_awesome_image"/>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/height120"
android:alpha="0.5"
android:background="@color/my_blue_color"/>
</FrameLayout>
png
। तब पृष्ठभूमि नहीं बदलेगी? इसके अलावा अल्फा और टिंट बहुत अलग हैं। टिंट रंग बदलने की तरह है, अगर मैं गलत नहीं हूं। कोई अपराध नहीं। बस मदद करने की कोशिश कर रहा है :)