Estoy tratando de aplicar un degradado lineal a mi ListView. Este es el contenido de mi xml dibujable:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#3A3C39"
android:endColor="#181818"
android:angle="270"
/>
<corners android:radius="0dp" />
</shape>
Entonces lo aplico a mi ListView con:
android:background="@drawable/shape_background_grey"
Funciona pero parece muy "anillado" en el emulador y también en un dispositivo real.
¿Hay alguna forma de reducir este "comportamiento"?

@Francesco¡Excelente! Ayudó en mi Galaxy S con Android 2.2 . Convierta su comentario útil en una respuesta para que la gente pueda votar por él.Respuestas:
Como sugiere Romain Guy:
listView.getBackground().setDither(true);resuelve mi problema
Si esto no es suficiente, especialmente para dispositivos AMOLED y / o hdpi, intente esto:
@Override public void onAttachedToWindow() { super.onAttachedToWindow(); Window window = getWindow(); window.setFormat(PixelFormat.RGBA_8888); }fuente
listView.getBackground().setDither(true);no funcionará, tuve que anular elonAttachedToWindowmétodo.Simplemente puede habilitar el tramado en su objeto Drawable.
fuente
setDither()quedó obsoleto en el nivel de API 23. Esta propiedad ahora se ignora.Pon esto en tu actividad:
@Override public void onAttachedToWindow() { super.onAttachedToWindow(); Window window = getWindow(); window.setFormat(PixelFormat.RGBA_8888); }fuente
Para mí en HTC Desire funciona así
window.getDecorView().getBackground().setDither(true);fuente
setDither()quedó obsoleto en el nivel de API 23. Esta propiedad ahora se ignora.Para mí, las bandas desaparecieron cuando configuré android: useLevel = "true" en el degradado: gradient_dark.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#464646" android:endColor="#323232" android:angle="270" android:type="linear" android:useLevel="true" /> </shape>Pero primero intenté usar una lista de capas con un "ruido" dibujable para eliminar las bandas, ayuda, pero todavía hay algunas bandas.
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/gradient_dark"/> <item> <bitmap android:gravity="center" android:src="@drawable/noise_repeater" android:tileMode="repeat" /> </item> </layer-list>El dibujable "noise_repeater" que creé y usé
fuente
Si el tramado y el ajuste RGBA_888 no ayudan en algunos teléfonos, la solución puede ser establecer el elemento
layerTypequesoftware, para desactivar la aceleración de hardwareandroid:layerType="software"Esto solucionó mi problema en un teléfono Samsung S5.
fuente
Lo único que funcionó para mí fue establecer un canal alfa ligeramente transparente tanto en startColor como en endColor.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#FE3A3C39" android:endColor="#FE181818" android:angle="270" /> </shape>Tuve la idea de probar esto de esta otra pregunta SO: android: dither = "true" no dither, ¿qué pasa?
fuente