validar studio metodos imagen ejemplo centercrop cargar asignar android imageview colorfilter

studio - set image view android



setColorFilter no funciona (8)

Estoy tratando de implementar un filtro de color simple en una vista de imagen para convertir la imagen en negro en una imagen blanca. Para lograr eso, hago lo siguiente:

weatherImg.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY); weatherImg.setImageResource(R.drawable.b_clouded_rain);

También intenté cambiar el color del filtro de color a rojo y blanco, pero ninguno de ellos tiene efecto. ¿Qué estoy haciendo mal?


Depende del tipo de filtro que desee aplicar. Si desea aplicar un nuevo color en una imagen con transparencias, eso es lo que funcionó para mí:

weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);

Si desea obtener más información acerca de estos filtros PorterDuff, encontré un artículo de Goog que me ayudó a entender: http://www.ibm.com/developerworks/java/library/j-mer0918/ darle una lectura :)


Estaba teniendo problemas con setColorFilter en un Samsung S3 con 4.3 y la única forma en que podía hacer que el filtro funcionara fue aplicándolo en el método de draw(Canvas canvas) :

public class ColouredDrawable extends BitmapDrawable { private ColorFilter mColorFilter; public ColouredDrawable(Bitmap toTransform, int toColour, Resources resources) { super(resources, toTransform); float[] matrix = { 0, 0, 0, 0, ((toColour & 0xFF0000) / 0xFFFF), 0, 0, 0, 0, ((toColour & 0xFF00) / 0xFF), 0, 0, 0, 0, (toColour & 0xFF), 0, 0, 0, 1, 0 }; mColorFilter = new ColorMatrixColorFilter(matrix); } @Override public void draw(Canvas canvas) { setColorFilter(mColorFilter); super.draw(canvas); }

La simple aplicación de setColorFilter al BitmapDrawable no pareció tener ningún efecto.


Para Android 4.3 y 4.4, setColorFilter no funciona. Use DrawableCompat en su lugar.

val drawable = DrawableCompat.wrap(ContextCompat.getDrawable( context, R.drawable.b_clouded_rain)); DrawableCompat.setTint(drawable, foregroundColor); DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN) .setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY); weatherImg.setImageResource(R.drawable.b_clouded_rain);


Para mí, simplemente llamar a setColorFilter() en ImageView no funcionaba.

imageView.setColorFilter(ResourcesCompat.getColor(resources, color, null)) //didnt work on 21, only 22+

Por alguna razón, en la API 21, la única forma en que podía hacer que setColorFilter() funcionara correctamente era publicar el cambio en la cola de mensajes de vistas.

imageView.post { imageView.setColorFilter(ResourcesCompat.getColor(resources, color, null)) } //this works on 21+


Para mí, solo esta solución funcionó:

image.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY); image.setImageResource(R.drawable.img);

se aplica filtro si R.drawable.img es una imagen vectorial y no tiene efecto para el recurso ráster


Por mucho que odie responder mis propias preguntas, encontré el problema: debería haber usado:

weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);


Tuve el mismo problema en Android 6. Se resolvió utilizando ImageView.getDrawable().setColorFilter() lugar de ImageView.setColorFilter() .


Usamos este código

Drawable drawable = DrawableCompat.wrap(getDrawable(drawableResource)); drawable.mutate(); DrawableCompat.setTint(drawable, getColor(color)); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); public static int getColor(int id) { return ContextCompat.getColor(getInstance().context, id); } public static Drawable getDrawable(int id) { return ContextCompat.getDrawable(getInstance().context, id); }