Создайте новый цвет для рисования

Я пытаюсь преобразовать шестнадцатеричное значение в int, чтобы я мог создать новый цвет для рисования. Я не уверен, если это возможно, но согласно документации, это должно. Это прямо просит

public ColorDrawable (int color)

Добавлено на уровне API 1 Создает новый ColorDrawable с указанным цветом.

Параметры color Цвет для рисования.

Итак, мой код не работает, потому что я получаю ошибку Invalid int: "FF6666". Есть идеи?

int decode = Integer.decode("FF6666");
ColorDrawable colorDrawable = new ColorDrawable(decode);

7 ответов

Решение

Поскольку вы говорите о гексе, вы должны начать с 0x и не забывайте непрозрачность.

Итак, в основном: 0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666);

Вы также можете создать новый файл colors.xml в /res и определить цвета следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#FF6666</color>
</resources>

и просто получить цвет, определенный в R.color.mycolor

getResources().getColor(R.color.mycolor)

Для использования с ContextCompat и изменения цвета вы можете сделать что-то вроде этого:

ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));

Так и должно быть...

ColorDrawable cd = new ColorDrawable(0xffff6666);

Обратите внимание, что я использовал 8 шестнадцатеричных цифр, а не 6 шестнадцатеричных. которые добавляют к прозрачности

Следуя приведенным выше советам, составьте краткое изложение этого вопроса:

  1. ColorDrawable colorDrawable = new ColorDrawable (Color.parseColor ("# ce9b2c")); `

  2. ColorDrawable colorDrawable = new ColorDrawable (0xFFCE9B2C); Обратите внимание, что есть 8 шестнадцатеричных цифр, а не 6 шестнадцатеричных, которые не работают. Дело все

  3. ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(mContext,R.color.default_color));

Выбор за вами!

Я думаю, что вы должны использовать:

public static int parseColor (String colorString)

Добавлено на уровне API 1. Разобрать строку цвета и вернуть соответствующий цвет-int. Если строка не может быть проанализирована, выдается исключение IllegalArgumentException. Поддерживаемые форматы: #RRGGBB #AARRGGBB красный, синий, зеленый, черный, белый, серый, голубой, пурпурный, желтый, светло-серый, темно-серый, серый, светло-серый, темно-серый, аква, фуксия, салатовый, бордовый, темно-синий, оливковый, фиолетовый, серебро, чирок

Вот как я преобразовал шестнадцатеричный цвет в int и применил к фону представления

Допустим, у нас есть цвет # 8080000.

1) Преобразование Hex в INT

int myColor = Color.parseColor("#808000");

2) Установить фон

view.setBackgroundColor(context.getColor(myColor));

Ксамарин/Мауи:

        protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);      

        Window.SetBackgroundDrawable(new ColorDrawable(ColorExtensions.ToAndroid(Colors.Black)));
    }
Другие вопросы по тегам