প্রোগ্রামে অ্যান্ড্রয়েডে কোনও চিত্র দর্শনের জন্য কীভাবে রঙিন সেট করবেন?


396

কোনও চিত্র দেখার জন্য রঙিন রঙ লাগানো দরকার ... আমি এটি নিম্নলিখিত উপায়ে ব্যবহার করছি:

imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);

তবে এটি পরিবর্তন হয় না ...


15
আপনি পূর্ণসংখ্যার রঙ মানের পরিবর্তে পূর্ণসংখ্যার রিসোর্স আইডিটি ব্যবহার করতে পারেন, আরকোলার.ব্লিউকে getResources ()। GetColor (R.color.blue) এ রূপান্তর করার চেষ্টা করুন
মিলোস্মেন্স

অঙ্কনযোগ্য অঙ্কনযোগ্য = ...; অঙ্কনযোগ্য.সেটর কালারফিল্টার (প্রসঙ্গে) imageView.setImageDrawable (অঙ্কনযোগ্য); // যে কোনও রঙ এখানে ব্যবহার করা যেতে পারে
শিখা 3

উত্তর:


915

আপনি এর মাধ্যমে কোডটিতে বেশ সহজেই রঙিন রঙ পরিবর্তন করতে পারেন:

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 বা তদূর্ধ্ব।



12
এক্সএমএল, অ্যান্ড্রয়েডে: টিন্ট = "@ রঙ / নীল"
লুইস

1
প্লাস অ্যান্ড্রয়েড:
টিন্টটি

8
android:tintসমস্ত অ্যান্ড্রয়েড সংস্করণে কাজ করে। আপনি কি কথা বলছেন drawableTint?
ফাইনাল

11
পোর্টারডাফ.মোড.অনেকটি আমার পরিস্থিতিতে কাজ করে না আমি পোর্টারডাফ.মড.এসআরসিএনপি ব্যবহার করেছি এবং এটি কাজ করে
মোহাম্মদ নাগেহ

234

বেশিরভাগ উত্তরগুলি ব্যবহার করে setColorFilterযা মূলত যা বলা হয়েছিল তা নয়।

ব্যবহারকারী @ ট্যাডের উত্তরটি সঠিক দিকে রয়েছে তবে এটি কেবলমাত্র 21++ এ কাজ করে।

সমস্ত অ্যান্ড্রয়েড সংস্করণে রঙিন সেট করতে, এটি ব্যবহার করুন ImageViewCompat:

ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));

মনে রাখবেন যে এক্ষেত্রে yourTintঅবশ্যই "রঙের আন্ত" হতে হবে। আপনার মতো রঙের সংস্থান থাকলে R.color.blueআপনার প্রথমে রঙটি লোড করা দরকার:

ContextCompat.getColor(context, R.color.blue);

6
গ্রহণযোগ্য উত্তর হওয়া উচিত। নোট করুন যে এটি কেবল ImageViewঅ্যাপকম্প্যাট থিম সহ এক্সএমএল উদাহরণগুলিতে বা AppCompatImageViewসাবক্লাসে কাজ করে।
লুই সিএডি

1
@ এ্যাডভ আপনার সমাধানটির প্রশংসা করেছেন তবে প্রশ্নটি ২০১৩ সালে জিজ্ঞাসা করা হয়েছিল এবং ইমেজভিউকম্প্যাট এবং অ্যাপকম্প্যাট আইমেজভিউ প্রকাশিত হয়েছে যথাক্রমে জুন ২০১ in সালের ২৫.৪.০ এবং ২৫.০.০১ ডিসেম্বর ২০১ 2016 :)
হার্ডিক

1
@ অ্যাড্যাব অবশ্যই তবে আপনি নিজের জবাবটিতে এটি সঠিকভাবে উল্লেখ করেননি যে আপনার সমাধানটি নতুন এবং নতুন সমর্থন লাইব্রেরি 25.4.0 এবং তার বেশি প্রয়োজন কারণ সমর্থন লাইবের নিম্ন সংস্করণ সহ এই শ্রেণিটি উপলব্ধ নেই তাই কেউ এটি খুঁজে পেল না !! !! উপায় দ্বারা আমি উত্তরটি সম্পাদনা করেছি :) শুভ দিন ...
হার্ডিক

এটি এপিআই 16 এ কাজ করছে না
তৈয়ব মাজহার

49

এটি আমার পক্ষে কাজ করেছে

mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));

হ্যাঁ, দ্বিতীয় প্যারামিটার ছাড়াই আমার পক্ষেও কাজ করেছেন .. এটিও যেতে পারেmImageView.setColorFilter(getContext().getResources().getColor(R.color.green_500));
বিস্ক্রমে মুহাম্মদ

upvated এবং দ্বিতীয় পরামিতি ছাড়াই, এটি কবজ মত কাজ করে। থেক্স @ টোবস্কো 42
রবি ভানিয়া

35

@ হার্দিকের ঠিক আছে আপনার কোডের অন্য ত্রুটিটি হল আপনি যখন আপনার এক্সএমএল-সংজ্ঞায়িত রঙটি উল্লেখ করেন। শুধুমাত্র আপনার কাছে আইডি পাস 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পদ্ধতিটি খুব বেশি তদন্ত করি নি ...)


22

পরে আমি সমস্ত পদ্ধতি চেষ্টা করেছিলাম এবং তারা আমার পক্ষে কাজ করে নি।

আমি অন্য পোর্টডাফ.মোডি ব্যবহার করে সমাধানটি পেয়েছি।

imgEstadoBillete.setColorFilter(context.getResources().getColor(R.color.green),PorterDuff.Mode.SRC_IN);

14

ললিপপ দিয়ে শুরু করে, বিটম্যাপড্রেইবলগুলির জন্য একটি টিন্ট পদ্ধতিও রয়েছে যা নতুন প্যালেট শ্রেণীর সাথে কাজ করে:

সার্বজনীন শূন্য সেটটেন্টলিস্ট (কালারস্টেটলিস্ট টিন্ট)

এবং

পাবলিক অকার্যকর সেটটিন্টমোড (পোর্টারডাফ.মড টিিন্টমোড)

Android এর পুরানো সংস্করণগুলিতে, আপনি এখন অঙ্কনযোগ্য কমপ্যাট লাইব্রেরি ব্যবহার করতে পারেন


2
আসলে, সমর্থন লাইব্রেরি এটি সমর্থন করে। আমার উত্তর দেখুন: স্ট্যাকওভারফ্লো.com
অ্যান্ড্রয়েড বিকাশকারী

12

এটা চেষ্টা কর. সমর্থন লাইব্রেরি সমর্থন করে এমন সমস্ত অ্যান্ড্রয়েড সংস্করণে এটি কাজ করা উচিত:

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 এর আরও আকর্ষণীয় বৈশিষ্ট্যগুলি সম্পর্কে পড়তে পারেন ।


1
imageView.getBackground()অঙ্কনযোগ্য পেতে আমাকেও করতে হয়েছিল , কারণ imageView.getDrawable()শূন্য ছিল was
রক লি

@ রোকলি নিশ্চিত হয়ে নিন যে আপনি চিত্র ভিউ এক্সএমএল বা সেটআইগ্রেজ রিসোর্স কোডে src ব্যবহার করেছেন
orelzion

ইমেজভিউ ব্যাকগ্রাউন্ডের জন্য এটি রঙিন রঙ নির্ধারণ করার সঠিক উপায়
লিগর

12

অ্যাডেভকে আরও সহজ সরলিকৃত এক্সটেনশন ফাংশন ধন্যবাদ

fun ImageView.setTint(@ColorRes colorRes: Int) {
    ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(ContextCompat.getColor(context, colorRes)))
}

ব্যবহার: -

imageView.setTint(R.color.tintColor)

বাটনের / টেক্সটভিউয়ের পাঠ্য রঙের জন্য কি একই রকম আছে?
অ্যান্ড্রয়েড বিকাশকারী 14

আপনি কি টেক্সটভিউ টেক্সটভিউর জন্য টেক্সটভিউ টেক্সট কালার বা রঙিন বলতে চান?
মনোহর রেড্ডি

আমার অর্থ "পাঠ্য রঙ" পাঠ্যের রঙ। তবে আমি মনে করি এটি বেশ সমস্যাযুক্ত, যেহেতু প্রতিটি রাজ্যের জন্য পাঠ্যের একটি রঙ রয়েছে ... আবার, যখন আমি অ্যাকসেন্ট রঙ সেট করি তখন এটি কীভাবে ঠিক কাজ করে ... অদ্ভুত .... সম্ভবত উচ্চারণের রঙটি সেট করা কি সম্ভব? একটি নির্দিষ্ট বাটন (বা টেক্সটভিউ), প্রোগ্রামগতভাবে?
অ্যান্ড্রয়েড বিকাশকারী

11

যদি আপনার রঙের হেক্স স্বচ্ছতা থাকে তবে নীচের কোডটি ব্যবহার করুন।

ImageViewCompat.setImageTintMode(imageView, PorterDuff.Mode.SRC_ATOP);
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(Color.parseColor("#80000000")));

আভা পরিষ্কার করতে

ImageViewCompat.setImageTintList(imageView, null);

"img" এর ধরণ কী
বেয়াজ

1
@ বায়াজ ইমেজভিউর imgধরণের।
সাঁই


9

প্রথম উত্তরটি আমার পক্ষে কার্যকর হয়নি:

//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++ এআইপি-তে কাজ করে বলে মনে হচ্ছে, তবে আমার কাছে এটি কোনও সমস্যা ছিল না। এই সমস্যাটি সমাধান করার জন্য আপনি একটি চিত্রভিউকমপ্যাট ব্যবহার করতে পারেন।

আমি আশা করি আমি কাউকে সাহায্য করেছি :-)


7

ললিপপ থেকে শুরু করে, এমন একটি পদ্ধতি রয়েছে 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);

6
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);

6

অ্যান্ড্রয়েডে প্রোগ্রামগতভাবে কোনও চিত্র দেখার জন্য রঙিন সেট করার জন্য

অ্যান্ড্রয়েডের জন্য আমার দুটি পদ্ধতি রয়েছে:

1)

imgView.setColorFilter(context.getResources().getColor(R.color.blue));

2)

 DrawableCompat.setTint(imgView.getDrawable(),
                     ContextCompat.getColor(context, R.color.blue));

আমি আশা করি আমি কাউকে সাহায্য করেছি :-)


4

যোগ করা হচ্ছে 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)
}

আমি মনে করি এটি এমন একটি ফাংশন যা কোনও অ্যান্ড্রয়েড প্রকল্পে থাকতে কার্যকর হতে পারে!


4

আমি দেখেছি যে আমরা রঙিন নির্বাচনের জন্য রঙ নির্বাচক ব্যবহার করতে পারি:

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>

হাই, এটি ভেক্টর ড্রইবেলেসের জন্য কাজ করছে না..এর জন্য কোনও ওয়ার্কআরাউন্ড?
মানুকুমার

@Manukumar ব্যবহারের app:srcCompatপরিবর্তে android:src, এবং যোগ vectorDrawables.useSupportLibrary = trueমধ্যে defaultConfigআপনার build.gradle ফাইল অংশ। কিটক্যাট এমুলেটরটিতে সূক্ষ্ম কাজ করার জন্য পরীক্ষিত।
অ্যান্ড্রয়েড বিকাশকারী

3

ব্যবহার করবেন না PoterDuff.Mode, ব্যবহার করুন setColorFilter()এটি সবার জন্য কাজ করে।

ImageView imageView = (ImageView) listItem.findViewById(R.id.imageView);
imageView.setColorFilter(getContext().getResources().getColor(R.color.msg_read));

2

@ মিলস্মনস যেমন বলেছিলেন, আপনার ব্যবহার করা উচিত imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);

এই এপিআইতে রঙের সংস্থান আইডির পরিবর্তে রঙের মান প্রয়োজন, এটি আপনার মূল বিবরণটি কেন কার্যকর হয়নি।


2

আমি পার্টিতে দেরি করেছিলাম কিন্তু উপরে আমার সলিউশন দেখতে পেলাম না। আমরা এর মাধ্যমেও রঙিন রঙ সেট করতে সক্ষম হয়েছি 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)


0

টিংটিং সেট এবং আনসেট করতে এক্সটেনশন ফাংশন ব্যবহার করে কোটলিন সমাধান:

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))
}

-4

সঠিক উত্তর নয় তবে একটি সহজ বিকল্প:

  • চিত্রের উপরে অন্য একটি ভিউ রাখুন
  • আপনি চাইলে (প্রোগ্রামক্রমে) পছন্দসই প্রভাবটি দেখতে ভিউর আলফা মানটি পরিবর্তন করুন ।

এটির জন্য এখানে একটি স্নিপেট রয়েছে:

<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। তাহলে পটভূমি বদলাবে না? এছাড়াও আলফা এবং আভা খুব আলাদা। রঙিন রঙের প্রতিস্থাপনের মতো, যদি আমি ভুল না করি। কোনও অপরাধের উদ্দেশ্যে নয়। কেবল সহায়তার চেষ্টা করছি :)
কিশোর_জে

বৈধ বিন্দু. এই উত্তরটি আমার ক্ষেত্রে সহায়তা করেছে। আশা কারও জুতোও ফিট করে।
শুভম চৌধুরী চৌধুরী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.