Estoy editando para simplificar la pregunta, con la esperanza de que ayude a obtener una respuesta precisa.
Digamos que tengo la siguiente oval
forma:
<?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>
¿Cómo configuro el color mediante programación, desde una clase de actividad?
android
android-layout
shape
Cote Mounyo
fuente
fuente
oval
y es el fondo de un ImageView.View
clase y usándola comobase
vista en un diseño que permita la superposición de widgets (RelativeLayout
,FrameLayout
). Dentro de estaView
clase extendida , puedesdraw multiple images onto a canvas
. Pero, antes de hacerlo, eche un vistazo a esto -> Enlace (si aún no lo ha hecho).Respuestas:
Nota : La respuesta se ha actualizado para cubrir el escenario donde
background
hay una instancia deColorDrawable
. Gracias Tyler Pfaff , por señalar esto.Obtener el
Drawable
deimageView
usargetBackground()
:Verificar con los sospechosos habituales:
Versión compacta:
Tenga en cuenta que no se requiere verificación nula.
Sin embargo, debe usar
mutate()
los elementos dibujables antes de modificarlos si se usan en otro lugar. (De forma predeterminada, los elementos extraíbles cargados desde XML comparten el mismo estado).fuente
solid
parte de la forma. ¿Qué tal lastroke
porción?@username
su comentario para asegurarse de que se envíe una notificación al usuario. Por cierto, deberás subclasificarShapeDrawable
para establecer la parte del trazo. Más información aquí: Enlace . Mire el comentario ya que menciona un problema con la respuesta aceptada.ImageView's
fondo está configurado en aGradientDrawable
,getBackground()
no devolverá aShapeDrawable
. En su lugar, utilice elGradientDrawable
que se devuelve:GradientDrawable gradientDrawable = (GradientDrawable)imageView.getBackground();
....gradientDrawable.setColors(new int[] { color1, color2 });
.Hazlo así:
fuente
android:background
tu xml o inclusosetBackground
en la actividad antes de llamargetBackground()
? Debería funcionar si lo hubiera hecho.Una solución más simple hoy en día sería usar su forma como fondo y luego cambiar su color mediante programación mediante:
Consulte PorterDuff.Mode para ver las opciones disponibles.
ACTUALIZACIÓN (API 29):
El método anterior está en desuso desde API 29 y se reemplaza por lo siguiente:
Ver BlendMode para ver las opciones disponibles.
fuente
view.getBackground().setColorFilter(Color.parseColor("#343434"), PorterDuff.Mode.SRC_ATOP);
ya que puede haber un borde en el fondo o correos redondeados.getBackground()
llamada. Mi imageview.src contenía una forma y utilicé:imageIndicator.setColorFilter(toggleColor, PorterDuff.Mode.SRC_ATOP);
wheretoggleColor
es solo un int que previamente almacenó el resultado de getColor ()PorterDuff.Mode
paraBlendModeColorFilter
no se compilará como se requiereBlendMode
. Entonces para API 29 debería serview.background.colorFilter = BlendModeColorFilter(Color.parseColor("#343434"), BlendMode.SRC_ATOP)
.Prueba esto:
para más detalles revise este enlace este
Espero ayuda.
fuente
espero que esto ayude a alguien con el mismo problema
fuente
gd.setStroke(width_px, Color.parseColor("#FF5722"));
Ampliando la respuesta de Vikram , si está coloreando vistas dinámicas, como elementos de vista de reciclador, etc. Entonces probablemente quiera llamar a mutate () antes de establecer el color. Si no hace esto, cualquier vista que tenga un dibujo común (es decir, un fondo) también cambiará / coloreará su dibujo.
fuente
if (background instanceof LayerDrawable) { background = ((LayerDrawable) background.mutate()).getDrawable(indexIfLayerDrawable); } if (background instanceof ShapeDrawable)[...]
para manejar los diseños de fondos que usan<layer-list ... <item ...
.Esta pregunta fue respondida hace un tiempo, pero se puede modernizar reescribiendo como una función de extensión kotlin.
fuente
esta es la solución que funciona para mí ... también la escribí en otra pregunta: ¿Cómo cambiar dinámicamente el color de la forma?
fuente
Nada funciona para mí, pero cuando configuro el color de tinte funciona en Shape Drawable
requiere Android 5.0 API 21
fuente
Mi versión de la función de extensión Kotlin basada en las respuestas anteriores con Compat :
fuente
La manera simple de llenar la forma con el Radio es:
fuente
Quizás sea demasiado tarde, pero si estás usando Kotlin. Hay una manera como esta
Disfrutar....
fuente
Para cualquiera que use C # Xamarin, aquí hay un método basado en el fragmento de Vikram:
fuente