Filtro de color de conjunto de vistas de imagen a degradado

Tengo una imagen blanca que me gustaría colorear con un degradado. En lugar de generar un montón de imágenes de cada color con un gradiente específico, me gustaría hacer esto en el código (no xml).

Para cambiar el color de una imagen,

imageView.setColorFilter(Color.GREEN); 

Y esto funciona bien. Pero, ¿cómo puedo aplicar un color gradiente en lugar de un color sólido? LinearGradient no ayuda, porque setColorFilter no se puede aplicar a los objetos Shader .

EDIT : Esta es la imagen que tengo:

Introduzca aquí la descripción de la imagen

Esto es lo que quiero:

Introduzca aquí la descripción de la imagen

Y esto es lo que estoy recibiendo:

Introduzca aquí la descripción de la imagen

Tienes que obtener Bitmap de tu ImageView y redibujar el mismo Bitmap con Shader

 public void clickButton(View v){ Bitmap myBitmap = ((BitmapDrawable)myImageView.getDrawable()).getBitmap(); Bitmap newBitmap = addGradient(myBitmap); myImageView.setImageDrawable(new BitmapDrawable(getResources(), newBitmap)); } public Bitmap addGradient(Bitmap originalBitmap) { int width = originalBitmap.getWidth(); int height = originalBitmap.getHeight(); Bitmap updatedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(updatedBitmap); canvas.drawBitmap(originalBitmap, 0, 0, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, 0, 0, height, 0xFFF0D252, 0xFFF07305, Shader.TileMode.CLAMP); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawRect(0, 0, width, height, paint); return updatedBitmap; } 

UPDATE 3 He cambiado: colores de degradado, LinearGradient anchura = 0 y PorterDuffXfermode. Aquí una buena imagen para entender PorterDuffXfermode: Introduzca aquí la descripción de la imagen

Usted podría utilizar un selector

Main_header.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/. android" android:layout_width="fill_parent" android:layout_height="50dip" android:orientation="horizontal" android:background="@drawable/main_header_selector"> </LinearLayout> 

Main_header_selector.xml:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/. android"> <item> <shape> <gradient android:angle="90" android:startColor="#FFFF0000" android:endColor="#FF00FF00" android:type="linear" /> </shape> </item> </selector> 

El mismo fondo se puede aplicar a un ImageView.

Para definir y utilizar dinámicamente el selector, consulte este enlace: Definición dinámica y uso de selectores

Cree un archivo XML y colóquelo en la carpeta dibujable.

Gradient.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#CCb1e7fa" android:centerColor="#B3ffffff" android:endColor="#CCb1e7fa" android:angle="180" /> <corners android:radius="5dp" /> </shape> 

A continuación, agregue esto como fondo a su vista de imagen

  <ImageView android:id="@+id/umageview1" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/gradient" android:layout_centerHorizontal="true" /> 
  • Animación panorámica de Android ImageView con scaleType centerCrop
  • El fondo de pantalla ImageView dentro de la vista personalizada no aparece en algunos dispositivos
  • Cambiar la fuente de ImageView
  • Cómo cambiar el tamaño del marcador de imagen de ImageView con picasso
  • Vista de imagen con esquinas redondeadas después de escalar con ScaleType.CenterCrop
  • Esquinas redondeadas para una vista de imagen en android
  • Cómo obtener el color de fondo de un ImageView
  • Obtener la posición de imageview en el diseño android
  • MediaStore.Images.Media.getBitmap y fuera de error de memoria
  • Cómo poner 50% de ancho
  • Android pinch zoom imagen grande, memoria eficiente sin perder detalle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.