Estoy tratando de tinte de una imagen antes de Android API de nivel 21. He éxito teñida de elementos mediante:
<android:tint="@color/red"/>
Sin embargo, me parece que no puede averiguar cómo hacerlo a través de código en un ImageView:
Drawable iconDrawable = this.mContext.getResources().getDrawable(R.drawable.somedrawable);
DrawableCompat.setTint(iconDrawable, this.mContext.getResources().getColor(R.color.red));
imageView.setImageDrawable(iconDrawable);
He probado la configuración de la TintMode pero esto parece que no hacen diferentes. Estoy usando la v4 de compatibilidad de clase DrawableCompat incorrectamente?
- Me las arreglé para conseguir el efecto que yo estaba buscando, mediante la aplicación de un ColorFilter, utilizando el modo SRC_IN que creo que significa que sólo se multiplica el canal alfa por el color – que era lo que yo quería con el matiz de todos modos: setColorFilter(este.mContext.getResources().getColor(R. de color.rojo), PorterDuff.Modo.SRC_IN)
La forma más sencilla de tinte de la cruz-plataforma (si usted no necesita un ColorStateList) es:
No te olvides de mutar la Imagen antes de aplicar el filtro.
DrawableComapat.setTint(_, _)
tenido algún problema mientras yo trataba de llevar a cabo varias veces en prelollipop. Y tengo esto como una solución. GraciasEn caso de que alguien necesita usar
DrawableCompat
‘s tintado sin afectar a otros dibujables, aquí te explicamos cómo hacerlo conmutate()
:Que se puede simplificar a:
DrawableCompat.setTintList()
lugar.getResources().getColor(int res)
– está en desuso, para conseguir un color con sólo un Contexto de usoContextCompat.getColor(context, R.color.my_color);
Previamente teñido no fue apoyada por
DrawableCompat
.A partir de la biblioteca de soporte 22.1 usted puede hacer eso, pero es necesario hacerlo de esta forma:
mutate()
dibujableDrawableCompat
‘s teñido conmutate()
. Pensé que te gustaría echarle un vistazo de todos modos 🙂Las respuestas aquí no están trabajando para pre-lollipop-dispositivos (SupportLib 23.4.0) pero he publicado una solución que trabaja por la API de 17: https://stackoverflow.com/a/37434219/2170109
El siguiente código ha sido probado y se está trabajando en la Api 17, 19, 21, 22, 23 y N vista previa de 3:
Si miramos el código fuente de DrawableCompat usted verá que para cualquier versión de < 21 el método no hace nada.
La idea de DrawableCompat parece ser, simplemente, de no estrellarse en versiones antiguas, en lugar de proporcionar esa funcionalidad.
DrawableWrapper
implementa tinte con un filtro de color.Con el apoyo de la biblioteca 22.1 puede utilizar DrawableCompat para teñir dibujables.
Voy a compartir mi solución aquí porque se puede ahorrar un poco de tiempo a alguien.
Tuve una
ImageView
con vector de la imagen se utiliza como fuente de dibujable (en realidad, fue de Vectores de Soporte Dibujable de Android Support Library 23.3). Así, en primer lugar he envuelto así:mImageView.setImageDrawable(DrawableCompat.wrap(mImageView.getDrawable()));
Y después de que intenté aplicar el tinte es así:
Sin suerte.
Traté de llamar
mutate()
envuelto en dibujable, así como en la original dibujable – aún sin suerte.invalidate()
llamado enmImageView
hizo el truco.