Створіть новий кольоровий малюнок


77

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

public ColorDrawable (int color)

Додано в API рівня 1 Створює новий ColorDrawable із зазначеним кольором.

Параметри колір Колір для малювання.

Отже, мій код не працює, оскільки я отримую помилку з помилкою int: "FF6666". Будь-які ідеї?

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

якщо одна з наданих відповідей вирішила вашу відповідь, подумайте перевірити її як прийняту відповідь, щоб інша знала, що вашу проблему вирішено.
— HpTerm

Існує приємний утилітний клас android.graphics.Color, який має метод parseColor. Спробуйте використовувати його замість цього і не забудьте додати різкий префікс (#) до подання рядка кольорів, наприклад # FF6666
— Ігорь Комаров

Відповіді:


163

Оскільки ви говорите про шістнадцяткову форму, вам слід починати з, 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)

18
що мені потрібно, це new ColorDrawable(getResources().getColor(R.color.red)))подяка
— shareef

8
ContextCompat.getColor (getContext (), R.color.red) для
— сумісності

ми можемо змінити колір тла за допомогою цього компакт-диска, який є змінною типу

У додатковій примітці ви можете використовувати ColorDrawable для об’єктів, для яких потрібен Drawable, наприклад DividerItemDecoration.setDrawable (); замість використання фактичного малюваного макета, ви можете передати ColorDrawable, щоб просто змінити колір роздільника.
— 6rchid

21

Для використання з ContextCompat і повторного використання кольору ви можете зробити щось подібне:

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

Що означає this?
— Крістіан

@Christian Context
— JpCrow

10

Це повинно бути так ...

ColorDrawable cd = new ColorDrawable(0xffff6666);

Примітка. Я використовував 8 шістнадцяткових цифр, а не 6 шістнадцяткових цифр. що додає прозорості


Але ви хотіли б мати такі значення у відповідних файлах "res", а не в кодованому коді. Відповідь Enrichman повна :)
— aMiGo 02

Як cdвикористовується стосовно Toast?
— Azurespot

6

Дотримуючись наведених вище порад, щоб бути підсумком цього питання:

  1. ColorDrawable colorDrawable = новий ColorDrawable ( Color.parseColor ("# ce9b2c")); `

  2. ColorDrawable colorDrawable = новий ColorDrawable ( 0xFFCE9B2C ); Зверніть увагу, що є 8 шістнадцяткових цифр, а не 6 шістнадцяткових цифр, які не працюють. Справа все

  3. ColorDrawable colorDrawable = новий ColorDrawable (ContextCompat.getColor (mContext, R.color.default_color));

Підбираємо до вас!


Якщо у мене тоді масив кольорів?
— Принц Долакія

1
@DPrince , Ви можете спробувати це, int color = Color.HSVToColor(new float[]{...}) а потім скористатися вище.
— BertKing

4

Я думаю, вам доведеться використовувати:

public static int parseColor (String colorString)

Додано в API рівня 1 Проаналізуйте рядок кольорів та поверніть відповідний color-int. Якщо рядок неможливо проаналізувати, виникає виняток IllegalArgumentException. Підтримувані формати: #RRGGBB #AARRGGBB червоний, синій, зелений, чорний, білий, сірий, блакитний, пурпуровий, жовтий, світло-сірий, темно-сірий, сірий, світло-сірий, темно-сірий, аква, фуксія, вапно, темно-бордовий, темно-синій, оливковий, фіолетовий, срібло, чирок


1

Ось як я перетворив шістнадцятковий колір на int і застосував до фону перегляду

Скажімо, у нас колір # 8080000.

1) Перетворення шістнадцяткового в внутрішнє

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

2) Встановити фон

view.setBackgroundColor(context.getColor(myColor));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.