Estoy trabajando en una aplicación de Android, y tengo un dibujo que estoy cargando desde una imagen de origen. En esta imagen, me gustaría convertir todos los píxeles blancos a un color diferente, digamos azul, y luego almacenar en caché el objeto Drawable resultante para poder usarlo más tarde.
Entonces, por ejemplo, digamos que tengo un archivo PNG de 20x20 que tiene un círculo blanco en el medio, y que todo lo que está fuera del círculo es transparente. ¿Cuál es la mejor manera de convertir ese círculo blanco en azul y almacenar en caché los resultados? ¿Cambia la respuesta si quiero usar esa imagen de origen para crear varios Drawables nuevos (por ejemplo, azul, rojo, verde, naranja, etc.)?
Supongo que querré usar un ColorMatrix de alguna manera, pero no estoy seguro de cómo hacerlo.
fuente
/sillyandroid/src/main/java/me/angrybyte/sillyandroid/extras/Coloring.java
Respuestas:
Creo que en realidad solo puedes usar
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
. Esto establecería los píxeles blancos en rojo, pero no creo que afecte a los píxeles transparentes.Ver Drawable # setColorFilter
fuente
Drawable.mutate().setColorFilter( 0xffff0000, Mode.MULTIPLY)
más información: curious-creature.org/2009/05/02/drawable-mutationssetColorFilter
cada vez que usamos los íconos en lugar de tener selectores con diferentes tonos de color. Aún así, es una solución mucho mejor que editar pngs directamente y tener activos estáticos adicionales.SRC_IN
:myImage.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
Prueba este código:
fuente
Sé que esta pregunta se hizo mucho antes de Lollipop, pero me gustaría agregar una buena manera de hacer esto en Android 5. +. Haces un xml dibujable que hace referencia al original y le pones tinte de esta manera:
fuente
El nuevo soporte v4 trae el tinte nuevamente a la API 4.
puedes hacerlo así
fuente
Si tiene un dibujo que es un color sólido y desea cambiarlo a un color sólido diferente, puede usar a
ColorMatrixColorFilter
. La transparencia se conserva.fuente
int iColor = ContextCompat.getColor(context, R.color.primary);
.También uso
ImageView
para iconos (enListView
o pantalla de configuración). Pero creo que hay una manera mucho más simple de hacerlo.Utilizar
tint
para cambiar la superposición de color en su icono seleccionado.En xml,
funciona bien ya que proviene de
AppCompat
fuente
Debe hacer esto para todas las API:
fuente
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.LTGRAY);
cambiarán de negro a gris en el dibujo.Pude hacer esto con el siguiente código, que se toma de una actividad (el diseño es muy simple, solo contiene un ImageView, y no está publicado aquí).
fuente
Puede resolverlo utilizando las bibliotecas compatibles con Android. :)
fuente
mutate()
se requiere la llamada para poder cambiar el tono de un elemento extraíble, sin alterar todos los asociados de elementos extraíbles con esa ID de recurso.En su Actividad, puede teñir sus recursos de imagen PNG con un solo color:
Ahora, cuando use R.drawable. *, Debe colorearse con el tinte deseado. Si necesita colores adicionales, entonces debería poder .mutate () el dibujable.
fuente
Gracias a @sabadow
fuente
Si tiene su conjunto dibujable en ImageView, puede hacerlo con un trazador de líneas 1:
fuente
Consulte este código de muestra " ColorMatrixSample.java "
La API relevante está disponible aquí :
fuente
Esto funciona con todo con fondo:
Vista de texto, botón ...
fuente
Este fragmento de código funcionó para mí:
fuente
Hay muchas soluciones, pero nadie sugirió que si el archivo xml de recursos de color ya tiene color, podemos elegir directamente desde allí también de la siguiente manera:
fuente
Breve ejemplo para cambiar el color dibujable de acuerdo con
isWorking
campo.Mi forma xml:
Mi método para cambiar:
Ejemplo de uso:
fuente
en XML /res/values/color.xml
Código Java
fuente
Demasiado tarde pero en caso de que alguien lo necesite:
fuente
Funciona para algunos elementos dibujables simples. Lo utilicé en una forma rect simple de color sólido con esquinas redondeadas y necesitaba cambiar ese color con diferentes diseños.
Prueba esto
fuente
Es muy muy simple cuando usas una biblioteca para hacer eso por ti. Prueba esta biblioteca
Puedes llamar así:
fuente