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


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.