Я редактирую, чтобы сделать вопрос проще, надеясь, что это поможет найти точный ответ.
Скажем, у меня есть следующая oval
форма:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:angle="270"
android:color="#FFFF0000"/>
<stroke android:width="3dp"
android:color="#FFAA0055"/>
</shape>
Как установить цвет программно, из класса занятий?
android
android-layout
shape
Кот Мунио
источник
источник
oval
и является фоном ImageView.View
класс и используя его в качествеbase
представления в макете, который позволяет перекрывать виджеты (RelativeLayout
,FrameLayout
). Внутри этого расширенногоView
класса вы можетеdraw multiple images onto a canvas
. Но, прежде чем сделать это, взгляните на это -> Ссылка (если вы еще этого не сделали).Ответы:
Примечание . Ответ был обновлен, чтобы охватить сценарий, к которому
background
относится экземплярColorDrawable
. Спасибо Тайлеру Пфаффу за то, что указал на это.Получить
Drawable
отimageView
использованияgetBackground()
:Сверьтесь с обычными подозреваемыми:
Компактная версия:
Обратите внимание, что нулевая проверка не требуется.
Тем не менее, вы должны использовать
mutate()
на чертежах перед их изменением, если они используются в другом месте. (По умолчанию загружаемые из XML файлы рисования имеют одинаковое состояние.)источник
solid
часть формы. Как насчетstroke
порции?@username
свой комментарий, чтобы убедиться, что пользователю отправлено уведомление. Кстати, вам нужно будетShapeDrawable
создать подкласс для того, чтобы установить часть обводки. Больше информации здесь: Ссылка . Посмотрите на комментарий, поскольку он упоминает проблему с принятым ответом.ImageView's
фон установлен на aGradientDrawable
,getBackground()
не вернет aShapeDrawable
. Вместо этого используйтеGradientDrawable
, возвращаемый:GradientDrawable gradientDrawable = (GradientDrawable)imageView.getBackground();
....gradientDrawable.setColors(new int[] { color1, color2 });
.Делай так:
источник
android:background
свой xml или дажеsetBackground
в активность перед звонкомgetBackground()
? Это должно работать, если вы сделали это.В настоящее время более простым решением было бы использовать вашу форму в качестве фона, а затем программно изменить ее цвет с помощью:
Смотрите PorterDuff.Mode для доступных опций.
ОБНОВЛЕНИЕ (API 29):
Вышеуказанный метод устарел начиная с API 29 и заменен следующим:
См. BlendMode для доступных опций.
источник
view.getBackground().setColorFilter(Color.parseColor("#343434"), PorterDuff.Mode.SRC_ATOP);
на фоне могут быть границы или закругленные углы.getBackground()
звонок. Мой imageview.src содержал форму, и я использовал:imageIndicator.setColorFilter(toggleColor, PorterDuff.Mode.SRC_ATOP);
гдеtoggleColor
только int, который ранее сохранял результат от getColor ()PorterDuff.Mode
дляBlendModeColorFilter
не компилируется, как это требуетсяBlendMode
. Так что для API 29 так и должно бытьview.background.colorFilter = BlendModeColorFilter(Color.parseColor("#343434"), BlendMode.SRC_ATOP)
.Попробуй это:
подробнее проверить эту ссылку это
надеюсь помочь.
источник
надеюсь, что это поможет кому-то с той же проблемой
источник
gd.setStroke(width_px, Color.parseColor("#FF5722"));
Расширяя ответ Викрама , если вы раскрашиваете динамические представления, такие как элементы представления переработчика и т. Д. ... Тогда вы, вероятно, захотите вызвать mutate (), прежде чем установить цвет. Если вы этого не сделаете, любые виды, которые имеют общий объект рисования (например, фон), также будут иметь свои измененные / цветные рисунки.
источник
if (background instanceof LayerDrawable) { background = ((LayerDrawable) background.mutate()).getDrawable(indexIfLayerDrawable); } if (background instanceof ShapeDrawable)[...]
для работы с фонами, которые используют<layer-list ... <item ...
.На этот вопрос был дан ответ некоторое время назад, но его можно модернизировать, переписав его как функцию расширения kotlin.
источник
это решение, которое работает для меня ... написал также в другом вопросе: Как динамически изменить цвет формы?
источник
Ничто не работает для меня, но когда я устанавливаю оттенок, он работает на Shape Drawable
требуется Android 5.0 API 21
источник
Моя версия функции расширения Kotlin, основанная на ответах выше с Compat :
источник
Простой способ заполнить форму радиусом :
источник
Может быть, я слишком поздно. Но если вы используете Kotlin. Есть такой способ
Наслаждаться....
источник
Для тех, кто использует C # Xamarin, вот метод, основанный на фрагменте Викрама:
источник