Создание цвета Int из альфа, красный, зеленый, синий в Android - PullRequest
0 голосов
/ 06 июня 2019

Как мне создать цвет int из альфа, красного, зеленого, синего значений (все от 0 до 255)?

Мне нужен этот цвет int, чтобы установить цвет фона представления.

Я попробовал это:

    protected int colorStringToColor(String colorString){ // whereas colorString is i.e. "214+13+22+255" or "214+13+22+85"
        String[] comps = colorString.split("\\+");
        int myColor = 0;
        if(comps.length == 3){
            int a = 255;
            int r = Integer.parseInt(comps[0]);
            int g = Integer.parseInt(comps[1]);
            int b = Integer.parseInt(comps[2]);
            myColor = Color.argb(a, r, g, b);
        } else if (comps.length == 4){
            int a = Integer.parseInt(comps[3]);
            int r = Integer.parseInt(comps[0]);
            int g = Integer.parseInt(comps[1]);
            int b = Integer.parseInt(comps[2]);
            myColor = Color.argb(a, r, g, b);
        }
        return myColor;
    }

Однако, когда я использую результат для установки цвета фона представлений, оба примера colorString имеют одинаковый красный цвет ???

Большое спасибо.

Ответы [ 7 ]

3 голосов
/ 06 июня 2019

Ваш код безупречен, проблем нет.

Одна вещь: если вы отправите это значение "214 + 13 + 22 + 85" как целое число, то вы получите значение результата как суммуэти значения.так что, возможно, вы допустили ошибку там.

import android.graphics.Color;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            textView = findViewById(R.id.txt);
            textView.setTextColor(colorStringToColor("214+13+22+235")); 
        }

        public int colorStringToColor(String colorString){ // whereas colorString is i.e. "214+13+22+255" or "214+13+22+85"
            String[] comps = colorString.split("\\+");
            int myColor = 0;
            if(comps.length == 3){
                int a = 255;
                int r = Integer.parseInt(comps[0]);
                int g = Integer.parseInt(comps[1]);
                int b = Integer.parseInt(comps[2]);
                myColor = Color.argb(a, r, g, b);
            } else if (comps.length == 4){
                int a = Integer.parseInt(comps[3]);
                int r = Integer.parseInt(comps[0]);
                int g = Integer.parseInt(comps[1]);
                int b = Integer.parseInt(comps[2]);
                myColor = Color.argb(a, r, g, b);
            }
            return myColor;
        }

Я внедрил ваш код в свой проект и хорошо его проверил.Что я там увидел!Это работает.

2 голосов
/ 06 июня 2019

Вы можете преобразовать его, используя метод argb(int red, int green, int blue) из Цвет класса, например:

int convertedColor= Color.argb(red, green, blue);

и настройте его так:

yourView.setBackgroundColor(convertedColor);
1 голос
/ 06 июня 2019
 Color opaqueRed = Color.valueOf(0xffff0000); // from a color int
 Color translucentRed = Color.valueOf(1.0f, 0.0f, 0.0f, 0.5f);
0 голосов
/ 11 июня 2019

Я собираюсь договориться с Принцем, ваш код в порядке. Но также предложите теорию. Вы устанавливаете цвет представления, и он лишает прозрачности. Проверьте ваши номера они разные? Они должны быть. Когда вы кормите их в setBackgroundColor, они делают то же самое. Если я правильно помню, это на самом деле не устанавливает альфа. Попробуйте снять альфу и использовать в view.setAlpha(color>>24) после того, как вы установите цвет. Это функционально отличается?

Принц передает его в setTextColor, а не в setBackgroundColor.

view.setBackgroundColor(color);
view.setAlpha(color>>24);
0 голосов
/ 06 июня 2019
int nonTransparentRed = Color.argb(255, 255, 0, 0);
0 голосов
/ 06 июня 2019

Судя по вашему вопросу, вы не аннотируете возвращаемое значение функции @ColorInt.

Измените свою функцию на

@ColorInt
private int colorStringToColor(){...};

Также, в вашей функции, аннотируйте

@ColorInt int myColor = 0;

Android имеет класс android.graphics.Color, который предоставляет методы для работы с цветами.

Чтобы получить ColorInt из значений ARGB, вы можете использовать Color.argb(int alpha, int red, int green, int blue); метод, который вернет вам соответствующее значение ColorInt.

Вы можете узнать больше о классе цвета здесь

android.graphics.Color

0 голосов
/ 06 июня 2019

Использование:

import android.graphics.Color;
int colorInt = Color.rgb(red, green, blue);

// Set your view's background color
yourView.setBackgroundColor(colorInt);

Порядок параметров: красный, зеленый, синий.

...