Estoy editando para simplificar la pregunta, con la esperanza de que ayude a obtener una respuesta precisa.
Digamos que tengo la siguiente ovalforma:
<?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

ovaly es el fondo de un ImageView.Viewclase y usándola comobasevista en un diseño que permita la superposición de widgets (RelativeLayout,FrameLayout). Dentro de estaViewclase 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
backgroundhay una instancia deColorDrawable. Gracias Tyler Pfaff , por señalar esto.Obtener el
DrawabledeimageViewusargetBackground():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
solidparte de la forma. ¿Qué tal lastrokeporción?@usernamesu comentario para asegurarse de que se envíe una notificación al usuario. Por cierto, deberás subclasificarShapeDrawablepara establecer la parte del trazo. Más información aquí: Enlace . Mire el comentario ya que menciona un problema con la respuesta aceptada.ImageView'sfondo está configurado en aGradientDrawable,getBackground()no devolverá aShapeDrawable. En su lugar, utilice elGradientDrawableque se devuelve:GradientDrawable gradientDrawable = (GradientDrawable)imageView.getBackground();....gradientDrawable.setColors(new int[] { color1, color2 });.Hazlo así:
fuente
android:backgroundtu xml o inclusosetBackgrounden 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);wheretoggleColores solo un int que previamente almacenó el resultado de getColor ()PorterDuff.ModeparaBlendModeColorFilterno 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