2012-05-04 30 views
7

Necesito encontrar una manera de cambiar el color del mapa de bits en Android. Necesito reemplazar/cambiar los colores de la imagen oval sin problemas en mi aplicación, dependiendo del valor int. Necesito algo así como myValue=5 que cambie el color de mi imagen a RED y si myValue=322 cambia el color a BLUE. La única manera de que me parece que puedo hacer esto utilizaba archivo XML que se parece a esto:Android cambiar el color de ImageView/Bitmap

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval" android:padding="10dp"> 
<!-- you can use any color you want I used here gray color--> 
<solid android:color="#cccccc"/> 
    <corners 
    android:bottomRightRadius="10dp" 
    android:bottomLeftRadius="10dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp"/> 
</shape> 

y después de que cuando myValue está cambiando para establecer mi recurso de imagen ImageView. Pero de esta manera tengo que crear 35 archivos xml diferentes ... lo cual no creo que sea una buena idea.

¿Alguien que pueda sugerir una mejor solución para hacer esto?

Respuesta

20

Así es como he resuelto este problema:

  1. Declare una ImageView con src="@drawable/button"
  2. Crear una Drawable y establecer ColorFilter a ella y después de que lo usa como src para su ImageView declarado como este:

>

Drawable myIcon = getResources().getDrawable(R.drawable.button); 
ColorFilter filter = new LightingColorFilter(Color.BLUE, Color.BLUE); 
myIcon.setColorFilter(filter); 
color.setImageDrawable(myIcon); 
+0

¿También puede mencionar cómo hacer esto en el xml si es posible? – Bhargav

+4

Nvm Lo encontré, tengo que usar el atributo 'android: tint' para' imageview' – Bhargav

1

En caso de que esto.

Drawable myIcon = getResources().getDrawable(R.drawable.button); 
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.BLACK); 
myIcon.setColorFilter(filter); 
16

Esta solución no funciona muy bien para mí. En algunas imágenes, el color final era incorrecto. utilizo esta solución en su lugar:

Drawable myIcon = getResources().getDrawable(R.drawable.your_image); 
myIcon.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP); 
((ImageView)findViewById(R.id.view_to_change)).setImageDrawable(myIcon); 
+0

Funcionó ... ¡gracias muchísimo! – cdkn7

+0

Gracias funciona como un encanto :) – Tony

3
getResources().getDrawable(R.drawable.button); 

ahora es obsoleto. También puede hacerlo de esta manera:

((ImageView) findViewById(R.id.my_icon)) 
    .setColorFilter(new LightingColorFilter(Color.BLUE, Color.BLUE)); 
Cuestiones relacionadas