অ্যান্ড্রয়েডে একটি অঙ্কনযোগ্য রঙগুলি কীভাবে পরিবর্তন করবেন?


271

আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন নিয়ে কাজ করছি, এবং আমার একটি আঁকানো আছে যা আমি উত্স চিত্র থেকে লোড করছি। এই চিত্রটিতে, আমি সমস্ত সাদা পিক্সেলকে আলাদা আলাদা রঙে রূপান্তর করতে চাই, নীল বলি এবং তারপরে ফলস্বরূপ অঙ্কনযোগ্য বস্তুটিকে ক্যাশে করি যাতে আমি এটি পরে ব্যবহার করতে পারি।

সুতরাং উদাহরণস্বরূপ বলুন আমার কাছে একটি 20x20 পিএনজি ফাইল রয়েছে যার মাঝখানে একটি সাদা বৃত্ত রয়েছে, এবং বৃত্তের বাইরের সমস্ত কিছুই স্বচ্ছ। সেই সাদা বৃত্তটি নীল করে দেওয়া এবং ফলাফলগুলি ক্যাশে করার সর্বোত্তম উপায় কী? আমি যদি উত্স চিত্রটি বেশ কয়েকটি নতুন অঙ্কনযোগ্য তৈরি করতে (নীল, লাল, সবুজ, কমলা ইত্যাদি বলি) ব্যবহার করতে চাই তবে কি উত্তর পরিবর্তন হবে?

আমি অনুমান করছি যে আমি কোনও উপায়ে একটি কালারম্যাট্রিক্স ব্যবহার করতে চাই, তবে কীভাবে তা নিশ্চিত তা আমি নিশ্চিত নই।


2
আপনি অবশেষে কোনওভাবে এই কাজ পেয়েছেন? আমি নীচে অনেকগুলি উত্তর নীচে দেখতে পাচ্ছি, যার মধ্যে আমি অনেকগুলি চেষ্টা করেছিলাম, তবে কিছুই কার্যকর হয় না। আমার কাছে বর্তমানে একটি সাদা বর্গক্ষেত্র রয়েছে, যা প্রয়োজনের ভিত্তিতে প্রতিবারই আমি বিভিন্ন রঙ করতে চাই, যাতে আমাকে স্থিতিশীল সম্পদ তৈরি করতে না হয়। প্লিজ পরামর্শ দেয় যেহেতু আমি এখনও সম্পূর্ণ সাদা রঙে আমার সাধারণ আকারের জন্য একটি কার্যক্ষম সমাধানের জন্য অপেক্ষা করছি।
ওমকার.ghaisas

@ ওমকার.ghaisas আমি সিলিঅ্যান্ড্রয়েড নামে একটি লাইব্রেরি তৈরি করেছি যাতে একটি বহুমুখী রঙিন ক্লাস রয়েছে এবং এটি আঁকার এবং পাঠ্যের জন্য সমস্ত ধরণের রঙিন করে। আপনি এটি github.com/migsmns/silly-androidদেখতে পারেন । ক্লাসটি অবস্থিত/sillyandroid/src/main/java/me/angrybyte/sillyandroid/extras/Coloring.java
milosmns

উত্তর:


221

আমি মনে করি আপনি আসলে ব্যবহার করতে পারেন Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )। এটি সাদা পিক্সেলকে লাল রঙে সেট করবে তবে আমি মনে করি না এটি স্বচ্ছ পিক্সেলগুলিকে প্রভাবিত করবে।

অঙ্কনযোগ্য # সেট কালারফিল্টার দেখুন


9
এটি কার্যকর হবে যখন অঙ্কনযোগ্য একক রঙ হয়, আরও ভাল সাদা।
মিতুল নাকুম

67
যদি রঙ পরিবর্তন করা হয় ডায়ানমিকায় (উদাহরণস্বরূপ অ্যাডাপ্টারে) অঙ্কনীয় অবশ্যই পরিবর্তনীয় হতে হবে। উদাহরণ: Drawable.mutate().setColorFilter( 0xffff0000, Mode.MULTIPLY)আরও তথ্য: কৌতূহলী-
creature.org/2009/05/02/ শ্রাবনযোগ্য-

1
হ্যাঁ, এটি হাইলাইট করার জন্য বিশেষত ভাল (হালকা, গাer় বা এএ গ্রেস্কেল চিত্রটিতে একটি হিউ যোগ করার জন্য)) আমি এই কৌশলটি বোতামগুলি টগল করতে ব্যবহার করি যেখানে "চেক না করা" গ্রেস্কেল এবং "পরীক্ষিত" আমার অ্যাপ্লিকেশনের রঙ প্যালেট থেকে গা bold় রঙ। ব্যক্তিগতভাবে আমি এটি একটি কাস্টম চেকবক্সের চেয়ে সহজ মনে করি।
thom_nic

2
এটি হ'ল আমি যা খুঁজছিলাম, যদিও এটি অবিশ্বাস্যরূপে বিরক্তিকর যে আমরা এক্সএমএলে এটি করতে পারি না ( 5.0+ ব্যতীত )। টিঙ্কিং এমনকি অ্যাপকম্পেটে পাওয়া যায় না, তাই setColorFilterপ্রতিবার আমরা বিভিন্ন বর্ণের ছিটাযুক্ত নির্বাচকদের পরিবর্তে আইকনগুলি ব্যবহার করার সময় কল করতে আটকেছি stuck তবুও, সরাসরি পিএনজি সম্পাদনা করা এবং অতিরিক্ত স্থিতিশীল সম্পদ থাকার চেয়ে এটি অনেক ভাল সমাধান।
ক্রিস সাইরেফাইস

21
যদি আপনার উত্স আইকনটিতে গা dark় রঙ থাকে তবে গুণ করা যাবে না। গন্তব্য রঙের ব্যবহারের সাথে উত্স আইকন আকারটি রঙ করতে SRC_IN: myImage.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
ডিস্টো করুন

152

এই কোডটি একবার ব্যবহার করে দেখুন:

ImageView lineColorCode = (ImageView)convertView.findViewById(R.id.line_color_code);
int color = Color.parseColor("#AE6118"); //The color u want             
lineColorCode.setColorFilter(color);

106

আমি জানি এই প্রশ্নটি ললিপপের আগে জিজ্ঞাসা করার উপায় ছিল তবে আমি এটি অ্যান্ড্রয়েড 5 এ করার জন্য একটি দুর্দান্ত উপায় যুক্ত করতে চাই + আপনি একটি এক্সএমএল অঙ্কনযোগ্য তৈরি করেছেন যা মূলটির উল্লেখ করে এবং এটিতে যেমন রঙিন রঙ সেট করে:

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_back"
    android:tint="@color/red_tint"/>

এটি কি সর্বশেষ সমর্থন লাইব্রেরির অংশ?
এস-কে '

না এটি কেবল কয়েকটি সাধারণ উইজেটের সাহায্য করে।
মিনসম্যান

8
আভা DrawableCompat মাধ্যমে সহায়তা-V4 হয়
মার্ক Renouf

1
শীতল আমি এটি সন্ধান করব এবং সেই অনুযায়ী এটি আপডেট করব।
MinceMan

ফ্রেস্কো এই ধরণের অঙ্কনযোগ্যকে সমর্থন করে না
জ্যাকক্যাক

62

নতুন সমর্থন v4 টিপি ফিরে এপিআই 4 এ।

আপনি এটি এইভাবে করতে পারেন

public static Drawable setTint(Drawable d, int color) {
    Drawable wrappedDrawable = DrawableCompat.wrap(d);
    DrawableCompat.setTint(wrappedDrawable, color);
    return wrappedDrawable;
}

2
সমর্থন লাইব্রেরি থেকে শুরু 22.
rnrneverdies

1
এটি পছন্দসই সমাধান, ললিপপ প্রকাশ হওয়ার পরে থেকে পুরানো এপিআইগুলিতে টিন্টিং ড্রয়াবলগুলি ধূসর অঞ্চল। এই ব্রেকটা সেই বাধা! আমি এই সম্পর্কে জানতাম না - ধন্যবাদ @ পেই
রিকার্ডোসুসাদেভ

2
সতর্ক হোন! রাষ্ট্র সম্পর্কিত সমস্যাগুলি এড়াতে আপনার নতুন মোড়কযুক্ত অঙ্কনযোগ্য "# রূপান্তর ()" পরিবর্তন করা উচিত। স্ট্যাকওভারফ্লো.com
রিচার্ড

62

যদি আপনার কাছে এমন আঁকতে থাকে যা একটি শক্ত রঙ এবং আপনি এটি একটি ডিফারনেট কঠিন রঙে পরিবর্তন করতে চান তবে আপনি একটি ব্যবহার করতে পারেন ColorMatrixColorFilter। স্বচ্ছতা সংরক্ষণ করা হয়।

int iColor = Color.parseColor(color);

int red   = (iColor & 0xFF0000) / 0xFFFF;
int green = (iColor & 0xFF00) / 0xFF;
int blue  = iColor & 0xFF;

float[] matrix = { 0, 0, 0, 0, red,
                   0, 0, 0, 0, green,
                   0, 0, 0, 0, blue,
                   0, 0, 0, 1, 0 };

ColorFilter colorFilter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(colorFilter);

3
আপনি যদি স্ট্রিং (# ff0000 ইত্যাদি) এর পরিবর্তে কোনও রঙের সংস্থান ব্যবহার করতে চান তবে আপনি উদাহরণস্বরূপ int iColor = getRes स्त्रोत () ব্যবহার করতে পারেন। getColor (R.color.primary)
বেন ক্লেটন

এটি কাজ করে তবে আমার চেকবক্স রয়েছে এবং আমি মাঝখানে সাদা টিকটি সংরক্ষণ করতে চাই। এর জন্য কোন পরামর্শ?
ফারুক আরশেদ

3
বেনের মন্তব্যে কোডটি এখন অবচয় করা হয়েছে। পরিবর্তে, আপনি ব্যবহার করতে পারেন int iColor = ContextCompat.getColor(context, R.color.primary);
নিষিদ্ধ-জিওঞ্জিনিয়ারিং

জমকালো উত্তর !! সবাইকে ধন্যবাদ!
কাব্যেশ কানওয়াল

@ মাইক হিল ওকে, আপনি কেন 20 টিরও বেশি রঙ রাখেন তা ব্যাখ্যা করুন You আপনাকে অ্যারেতে আরও 20 টি রং sertোকানো দরকার কারণ অন্যথায় এটি
জাভা.এলংয়ের

50

আমি ImageViewআইকনগুলির জন্যও ( ListViewবা সেটিংস স্ক্রিনে) ব্যবহার করি। তবে আমি মনে করি এটি করার আরও অনেক সহজ উপায় আছে।

tintআপনার নির্বাচিত আইকনটিতে রঙের ওভারলে পরিবর্তন করতে ব্যবহার করুন ।

এক্সএমএলে,

android:tint="@color/accent"
android:src="@drawable/ic_event" 

এটি আসে থেকে সূক্ষ্ম কাজ করে AppCompat


3
একটি যাদুমন্ত্র মত কাজ করে! সহজ এবং নিখুঁত। এটি গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করা প্রয়োজন।
নাগা মললেশ মাদদালি

2
এখানে প্রচুর ভাল উত্তর রয়েছে তবে ওপির প্রশ্নের জন্য এটি সেরা এবং সহজ সমাধান।
সেবাস্তিয়ান ব্রেইট

এপিআই 22 এবং
তদূর্ধের জন্য

1
@ ফিলিপোগেনেরোব্লাগলুন আমি এপিআই 19-এ কাজ করতে দেখেছি
জেমশিট ইস্কেন্দরভ

41

আপনার সকল API এর জন্য এটি করা উচিত:

Drawable myIcon = getResources().getDrawable( R.drawable.button ); 
ColorFilter filter = new LightingColorFilter( Color.BLACK, Color.BLACK);
myIcon.setColorFilter(filter);

এটি গ্রহণযোগ্য উপায়ে সমস্যাটি সমাধান করেছে। তবে রঙটি ফিল্টার করার সময়, এটি ঘটতে পারে (আমার ক্ষেত্রে এটি ঘটেছিল) যে ফলস্বরূপ রঙটি প্রত্যাশার মতো নয়। হালকা করার জন্য যে রঙ ছিল। আমি যা করেছি তা হ'ল: Light নতুন লাইটিং কালারফিল্টার (কালার.পর্সকলার ("# এফএফ 1000000"), মাইফিনাল কালার) `
ইয়োরাকো গঞ্জালেস

1
পূর্ববর্তী মন্তব্যকারী কী বলছে বলে আমি মনে করি তার উপর জোর দিয়ে, এই সমাধানটি রঙ পরিবর্তন করে যদি লাইটিংক্লোরফিল্টারের 2 পরামিতি আলাদা হয়, উদাহরণস্বরূপ, ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.LTGRAY);আঁকতে কালোকে ধূসর করে বদলে দেয়।
এইচব্রেন্ট

1
আলফা যখন রঙিন রঙের জন্য ব্যবহৃত হয় তখন এটি কাজ করে না বলে মনে হয়।
ypresto

30

আমি নিম্নলিখিত কোডটি দিয়ে এটি করতে সক্ষম হয়েছি, যা কোনও ক্রিয়াকলাপ থেকে নেওয়া হয়েছে (লেআউটটি একটি খুব সাধারণ একটি চিত্র, যা কেবলমাত্র একটি চিত্রদর্শন রয়েছে, এবং এখানে পোস্ট করা হয়নি)।

private static final int[] FROM_COLOR = new int[]{49, 179, 110};
private static final int THRESHOLD = 3;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_colors);

    ImageView iv = (ImageView) findViewById(R.id.img);
    Drawable d = getResources().getDrawable(RES);
    iv.setImageDrawable(adjust(d));
}

private Drawable adjust(Drawable d)
{
    int to = Color.RED;

    //Need to copy to ensure that the bitmap is mutable.
    Bitmap src = ((BitmapDrawable) d).getBitmap();
    Bitmap bitmap = src.copy(Bitmap.Config.ARGB_8888, true);
    for(int x = 0;x < bitmap.getWidth();x++)
        for(int y = 0;y < bitmap.getHeight();y++)
            if(match(bitmap.getPixel(x, y))) 
                bitmap.setPixel(x, y, to);

    return new BitmapDrawable(bitmap);
}

private boolean match(int pixel)
{
    //There may be a better way to match, but I wanted to do a comparison ignoring
    //transparency, so I couldn't just do a direct integer compare.
    return Math.abs(Color.red(pixel) - FROM_COLOR[0]) < THRESHOLD &&
        Math.abs(Color.green(pixel) - FROM_COLOR[1]) < THRESHOLD &&
        Math.abs(Color.blue(pixel) - FROM_COLOR[2]) < THRESHOLD;
}

আমি থ্রেশহোল্ড বা FROM_COLOR কোথা থেকে পাব?
মাইকেনপেজ

সেগুলি কেবল স্থির ছিল যা আমি সংজ্ঞায়িত করেছি; আমি এগুলি অন্তর্ভুক্ত করার জন্য উত্তরটি সম্পাদনা করেছি।
ম্যাট ম্যাকমিন 16

আপনাকে ধন্যবাদ;) চেষ্টা করেও আমার সমস্যাটি এটি ফিট করে না। সেট কালারফিল্টার চেষ্টা করে দেখেছেন এবং এটি কাজ করে তবে .9.png চিত্রটি স্কেল করার ক্ষেত্রে একটি সমস্যা আছে। সুতরাং কেন আপনার যদি ধারণা থাকে তবে দয়া করে আমার প্রশ্নের উত্তর দিন। stackoverflow.com/questions/5884481/...
mikepenz

1
রঙিন ফিল্টারগুলি আরও সহজ।
আফলিস্টেড

17

আপনি এন্ড্রয়েড সমর্থন কম্প্যাট লাইব্রেরি ব্যবহার করে এটি সমাধান করতে পারেন। :)

 // mutate to not share its state with any other drawable
 Drawable drawableWrap = DrawableCompat.wrap(drawable).mutate();
 DrawableCompat.setTint(drawableWrap, ContextCompat.getColor(getContext(), R.color.your_color))

1
@ অমিতাবাবিশ্বস কেন আপনি আমার উত্তরকে ভুল করে পুরোপুরি বদলান? খণ্ড খণ্ডভাবে। 1. getResferences ()। GetDrawable () অবমূল্যায়ন করা হয়েছে !! ২. আমি সমর্থন লাইব্রেরিগুলি ব্যবহার করি কারণ আমি আন্দরিড এপি সংস্করণগুলি সম্পর্কে যত্ন নিতে চাই না। ৩. আমি অঙ্কনযোগ্যকে পুনরায় আঁকতে চাই না .... আপনি যদি অন্য কোনও পন্থা দেখাতে চান তবে নিজের উত্তর লিখুন।
রিকার্ড

1
@ অমিতাভাইব্বাস ছাড়াও, অঙ্কনযোগ্যগুলি সমস্ত গডড্রেবলের মধ্যে সম্পদ থেকে ভাগ করা হয়, সুতরাং mutate()কলটি সেই ড্রসিয়েলের সহযোগকে সেই সংস্থান আইডির সাথে পরিবর্তন না করেই একটি অঙ্কনযোগ্য রঙ পরিবর্তন করতে সক্ষম হওয়া প্রয়োজন।
রিকার্ড

1
এটাই সেরা উত্তর! কোনও চিত্রের দৃশ্যে অঙ্কনযোগ্য মোড়ানো প্রশ্নটি সমাধান করে না।
জুলিয়াস

15

আপনার ক্রিয়াকলাপে আপনি আপনার একক রঙের সাথে আপনার পিএনজি চিত্রের সংস্থানগুলিকে রঙ করতে পারেন:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myColorTint();
    setContentView(R.layout.activity_main);
}

private void myColorTint() {
    int tint = Color.parseColor("#0000FF"); // R.color.blue;
    PorterDuff.Mode mode = PorterDuff.Mode.SRC_ATOP;
    // add your drawable resources you wish to tint to the drawables array...
    int drawables[] = { R.drawable.ic_action_edit, R.drawable.ic_action_refresh };
    for (int id : drawables) {
        Drawable icon = getResources().getDrawable(id);
        icon.setColorFilter(tint,mode);
    }
}

এখন যখন আপনি আর। ডিগ্রিভেবল ব্যবহার করেন * * এটি পছন্দসই রঙের সাথে রঙিন হওয়া উচিত। আপনার যদি অতিরিক্ত রঙের প্রয়োজন হয় তবে আপনার অঙ্কনীয় পরিবর্তন করতে হবে)



4

আপনার যদি চিত্রকল্পে আপনার আঁকতে সক্ষম সেট থাকে তবে আপনি এটি 1 টি লাইনারের সাহায্যে করতে পারেন:

yourImageView.setColorFilter(context.getResources().getColor(R.color.YOUR_COLOR_HERE);

3

এই নমুনা কোডটি " রঙিনম্যাট্রিক্স নমুনা.জভা " দেখুন

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.graphics;

import com.example.android.apis.R;

import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

public class ColorMatrixSample extends GraphicsActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this));
    }

    private static class SampleView extends View {
        private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        private ColorMatrix mCM = new ColorMatrix();
        private Bitmap mBitmap;
        private float mSaturation;
        private float mAngle;

        public SampleView(Context context) {
            super(context);

            mBitmap = BitmapFactory.decodeResource(context.getResources(),
                                                   R.drawable.balloons);
        }

        private static void setTranslate(ColorMatrix cm, float dr, float dg,
                                         float db, float da) {
            cm.set(new float[] {
                   2, 0, 0, 0, dr,
                   0, 2, 0, 0, dg,
                   0, 0, 2, 0, db,
                   0, 0, 0, 1, da });
        }

        private static void setContrast(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   scale, 0, 0, 0, translate,
                   0, scale, 0, 0, translate,
                   0, 0, scale, 0, translate,
                   0, 0, 0, 1, 0 });
        }

        private static void setContrastTranslateOnly(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   1, 0, 0, 0, translate,
                   0, 1, 0, 0, translate,
                   0, 0, 1, 0, translate,
                   0, 0, 0, 1, 0 });
        }

        private static void setContrastScaleOnly(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   scale, 0, 0, 0, 0,
                   0, scale, 0, 0, 0,
                   0, 0, scale, 0, 0,
                   0, 0, 0, 1, 0 });
        }

        @Override protected void onDraw(Canvas canvas) {
            Paint paint = mPaint;
            float x = 20;
            float y = 20;

            canvas.drawColor(Color.WHITE);

            paint.setColorFilter(null);
            canvas.drawBitmap(mBitmap, x, y, paint);

            ColorMatrix cm = new ColorMatrix();

            mAngle += 2;
            if (mAngle > 180) {
                mAngle = 0;
            }

            //convert our animated angle [-180...180] to a contrast value of [-1..1]
            float contrast = mAngle / 180.f;

            setContrast(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x + mBitmap.getWidth() + 10, y, paint);

            setContrastScaleOnly(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x, y + mBitmap.getHeight() + 10, paint);

            setContrastTranslateOnly(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x, y + 2*(mBitmap.getHeight() + 10),
                              paint);

            invalidate();
        }
    }
}

প্রাসঙ্গিক এপিআই এখানে উপলব্ধ :


1
এটি কীভাবে কালারমাট্রিক্স ব্যবহার করবেন তা দেখায়, তবে আমি যে ফলাফলগুলি সন্ধান করছি তা পেতে এটি কীভাবে ব্যবহার করব তা আমি দেখছি না।
ম্যাট ম্যাকমিন

3

এটি ব্যাকগ্রাউন্ড সহ সমস্ত কিছু নিয়ে কাজ করে:

পাঠ্যদর্শন, বোতাম ...

TextView text = (TextView) View.findViewById(R.id.MyText);
text.setBackgroundResource(Icon);    
text.getBackground().setColorFilter(getResources().getColor(Color), PorterDuff.Mode.SRC_ATOP);

3

এই কোড স্নিপেট আমার জন্য কাজ করেছে:

PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(getResources().getColor(R.color.your_color),PorterDuff.Mode.MULTIPLY);

imgView.getDrawable().setColorFilter(porterDuffColorFilter);
imgView.setBackgroundColor(Color.TRANSPARENT)

2

অনেকগুলি সমাধান রয়েছে তবে কেউ পরামর্শ করেনি যে যদি রঙের সংস্থান এক্সএমএল ফাইলের ইতিমধ্যে রঙ থাকে তবে আমরা সেখান থেকে সরাসরি নীচের মতোও বেছে নিতে পারি:

ImageView imageView = (ImageView) findViewById(R.id.imageview);
imageView.setColorFilter(getString(R.color.your_color));

1

isWorkingক্ষেত্র অনুসারে অঙ্কনযোগ্য রঙ পরিবর্তন করার জন্য সংক্ষিপ্ত উদাহরণ ।

আমার আকৃতি এক্সএমএল:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@android:color/holo_blue_bright" />
    <corners android:radius="30dp" />
    <size
        android:height="15dp"
        android:width="15dp" />
</shape>

আমার পরিবর্তন করার পদ্ধতি:

private Drawable getColoredDrawable(int drawableResId, boolean isworking) {
    Drawable d = getResources().getDrawable(R.drawable.shape);
    ColorFilter filter = new LightingColorFilter(
            isworking ? Color.GREEN : Color.RED,
            isworking ? Color.GREEN : Color.RED);
    d.setColorFilter(filter);
    return d;
}

ব্যবহারের উদাহরণ:

text1.setCompoundDrawablesWithIntrinsicBounds(getColoredDrawable(R.drawable.shape, isworking()), null, null, null);

0
Int color = Color.GRAY; 
// or int color = Color.argb(123,255,0,5);
// or int color = 0xaaff000;

এক্সএমএল /res/values/color.xML এ

<?xml version="1.0" encoding="utf-8">
<resources>
    <color name="colorRed">#ff0000</color>
</resoures> 

জাভা কোড

int color = ContextCompat.getColor(context, R.color.colorRed);

GradientDrawable drawableBg = yourView.getBackground().mutate();
drawableBg.setColor(color);

0

খুব দেরী হয়েছে তবে কারও প্রয়োজন হলে:

   fun setDrawableColor(drawable: Drawable, color: Int) :Drawable {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            drawable.colorFilter = BlendModeColorFilter(color, BlendMode.SRC_ATOP)
            return drawable
        } else {
            drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
            return drawable
        }
    }

0

এটি কিছু সাধারণ অঙ্কনযোগ্যদের জন্য কাজ করে। আমি এটি গোলাকার কোণগুলির সাথে একটি সরল কঠিন রঙের আয়তাকার আকারে ব্যবহার করেছি এবং বিভিন্ন লেআউটে সেই রঙটি পরিবর্তন করতে হবে।

এটা চেষ্টা কর

android:backgroundTint="#101010"

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.