studio online gradientes fondos degrade angrytools android imageview gradient

android - online - Imageview establece el filtro de color a degradado



online gradient generator (3)

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" />

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

Para cambiar el color de una imagen, uso

imageView.setColorFilter(Color.GREEN);

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

EDITAR : Esta es la imagen que tengo:

Esto es lo que quiero:

Y esto es lo que estoy recibiendo:


Podrías usar 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 el selector dinámicamente, consulte este enlace: Definición dinámica y uso de selectores


Tienes que obtener el Bitmap de Bitmap de tu ImageView y volver a dibujar 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; }

ACTUALIZACIÓN 3 Cambié: colores de gradiente, ancho lineal de gradiente = 0 y PorterDuffXfermode. Aquí una buena foto para entender PorterDuffXfermode: