android drawable android-imageview colorfilter shapedrawable

android - Aplicación de ColorFilter a ImageView con ShapedDrawable



android-imageview shapedrawable (4)

Tengo un ImageView con android:src configurado en ShapedDrawable , es decir, un círculo blanco. Lo que quiero es colorear este ImageView en tiempo de ejecución para responder a algunos eventos. imgView.setColorFilter parece ser la solución, pero después de usar esto (se probaron diferentes parámetros) la imagen se vuelve invisible (no la veo en la pantalla).

¿Cómo resolver esto? ¿Y hay mejores formas de tener círculos de colores?


De acuerdo, tuve un juego rápido con esto y noté que tu problema con los círculos desaparecía. Sin que describa exactamente qué ha intentado, supongo que aún no ha intentado configurar el filtro de color para el Drawable . (a diferencia de ImageView , que solo parece funcionar con BitmapDrawable s).

Las siguientes afirmaciones funcionan perfectamente bien para un ShapeDrawable declarado ShapeDrawable con blanco como color inicial:

ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview); ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview); ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview); // we can create the color values in different ways: redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY ); greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY ); blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY );

The ShapeDrawable para completar: (Configuré el tamaño en ImageView , ver abajo)

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@android:color/white" /> </shape>

Y uno de los ImageView como ejemplo:

<ImageView android:id="@+id/circle_red_imageview" android:layout_width="40dp" android:layout_height="40dp" android:padding="5dp" android:src="@drawable/circle_white" />

Resultado visual:



Puede usar el atributo android:tint en ImageView en xml.

Ejemplo:

<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_drawable" android:tint="@color/your_color" />

Probado en Android 4.1.2 y 6.0.1


Si desea cambiar el uso de Color de imagen

PorterDuff.Mode.SRC_ATOP instead PorterDuff.Mode.MULTIPLY

en el ejemplo anterior