কোনও চিত্র দেখার জন্য রঙিন রঙ লাগানো দরকার ... আমি এটি নিম্নলিখিত উপায়ে ব্যবহার করছি:
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);
আপডেট :
@ এ্যাডভির উত্তর এখানে নতুন সমাধান আছে , তবে তার সমাধানটির জন্য আরও নতুন সমর্থন লাইব্রেরি প্রয়োজন - 25.4.0 বা তদূর্ধ্ব।
android:tint
সমস্ত অ্যান্ড্রয়েড সংস্করণে কাজ করে। আপনি কি কথা বলছেন drawableTint
?
বেশিরভাগ উত্তরগুলি ব্যবহার করে setColorFilter
যা মূলত যা বলা হয়েছিল তা নয়।
ব্যবহারকারী @ ট্যাডের উত্তরটি সঠিক দিকে রয়েছে তবে এটি কেবলমাত্র 21++ এ কাজ করে।
সমস্ত অ্যান্ড্রয়েড সংস্করণে রঙিন সেট করতে, এটি ব্যবহার করুন ImageViewCompat
:
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));
মনে রাখবেন যে এক্ষেত্রে yourTint
অবশ্যই "রঙের আন্ত" হতে হবে। আপনার মতো রঙের সংস্থান থাকলে R.color.blue
আপনার প্রথমে রঙটি লোড করা দরকার:
ContextCompat.getColor(context, R.color.blue);
ImageView
অ্যাপকম্প্যাট থিম সহ এক্সএমএল উদাহরণগুলিতে বা AppCompatImageView
সাবক্লাসে কাজ করে।
এটি আমার পক্ষে কাজ করেছে
mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));
mImageView.setColorFilter(getContext().getResources().getColor(R.color.green_500));
@ হার্দিকের ঠিক আছে আপনার কোডের অন্য ত্রুটিটি হল আপনি যখন আপনার এক্সএমএল-সংজ্ঞায়িত রঙটি উল্লেখ করেন। শুধুমাত্র আপনার কাছে আইডি পাস setColorFilter
পদ্ধতি, যখন আপনি ID ব্যবহার রঙ রিসোর্স খোজা উচিত, এবং পাস রিসোর্স করার 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
পদ্ধতিটি খুব বেশি তদন্ত করি নি ...)
ললিপপ দিয়ে শুরু করে, বিটম্যাপড্রেইবলগুলির জন্য একটি টিন্ট পদ্ধতিও রয়েছে যা নতুন প্যালেট শ্রেণীর সাথে কাজ করে:
সার্বজনীন শূন্য সেটটেন্টলিস্ট (কালারস্টেটলিস্ট টিন্ট)
এবং
পাবলিক অকার্যকর সেটটিন্টমোড (পোর্টারডাফ.মড টিিন্টমোড)
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;
}
এটি কাজ করতে আপনি উপরের যেকোনটি ব্যবহার করতে পারেন।
আপনি এখানে ডক্সে DrawableCompat এর আরও আকর্ষণীয় বৈশিষ্ট্যগুলি সম্পর্কে পড়তে পারেন ।
imageView.getBackground()
অঙ্কনযোগ্য পেতে আমাকেও করতে হয়েছিল , কারণ imageView.getDrawable()
শূন্য ছিল was
অ্যাডেভকে আরও সহজ সরলিকৃত এক্সটেনশন ফাংশন ধন্যবাদ
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.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++ এআইপি-তে কাজ করে বলে মনে হচ্ছে, তবে আমার কাছে এটি কোনও সমস্যা ছিল না। এই সমস্যাটি সমাধান করার জন্য আপনি একটি চিত্রভিউকমপ্যাট ব্যবহার করতে পারেন।
আমি আশা করি আমি কাউকে সাহায্য করেছি :-)
ললিপপ থেকে শুরু করে, এমন একটি পদ্ধতি রয়েছে 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);
অ্যান্ড্রয়েডে প্রোগ্রামগতভাবে কোনও চিত্র দেখার জন্য রঙিন সেট করার জন্য
অ্যান্ড্রয়েডের জন্য আমার দুটি পদ্ধতি রয়েছে:
1)
imgView.setColorFilter(context.getResources().getColor(R.color.blue));
2)
DrawableCompat.setTint(imgView.getDrawable(),
ContextCompat.getColor(context, R.color.blue));
আমি আশা করি আমি কাউকে সাহায্য করেছি :-)
যোগ করা হচ্ছে ADev এর উত্তর (যা আমার মতে সবচেয়ে সঠিক), Kotlin, এবং তার দরকারী এক্সটেনশন ফাংশন ব্যাপক গ্রহণ থেকে:
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
, এবং যোগ vectorDrawables.useSupportLibrary = true
মধ্যে defaultConfig
আপনার build.gradle ফাইল অংশ। কিটক্যাট এমুলেটরটিতে সূক্ষ্ম কাজ করার জন্য পরীক্ষিত।
ব্যবহার করবেন না 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
। তাহলে পটভূমি বদলাবে না? এছাড়াও আলফা এবং আভা খুব আলাদা। রঙিন রঙের প্রতিস্থাপনের মতো, যদি আমি ভুল না করি। কোনও অপরাধের উদ্দেশ্যে নয়। কেবল সহায়তার চেষ্টা করছি :)