
francesco laurita
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 se ve muy “anillado” en el emulador y también en un dispositivo real.
¿Hay alguna forma de reducir este “comportamiento”?

francesco laurita
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);
}
Simplemente puede habilitar el tramado en su objeto Drawable.
Pon esto en tu Actividad:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Window window = getWindow();
window.setFormat(PixelFormat.RGBA_8888);
}
Si la configuración de interpolación y RGBA_888 no ayuda en algunos teléfonos, la solución puede ser configurar el elemento layerType
a software
para deshabilitar la aceleración de hardware
android:layerType="software"
Esto solucionó mi problema en un teléfono Samsung S5.

Sebastián
Para mí en HTC Desire funciona así
window.getDecorView().getBackground().setDither(true);

TouchBoarder
Para mí, las bandas desaparecieron cuando configuré android:useLevel=”true” en el gradiente: 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="https://stackoverflow.com/questions/2928101/@drawable/noise_repeater"
android:tileMode="repeat" />
</item>
</layer-list>
El dibujable “noise_repeater” que creé y usé


Comunidad
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 a partir de esta otra pregunta SO: android: dither = “true” no interfiere, ¿qué pasa?
.
Solo una actualización: agregar getWindow().setFormat(PixelFormat.RGBA_8888); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); en el método onCreate parece funcionar también para hdpi con pantalla amoled (N1/Desire)
– Francesco Laurita
08 jun.
@Francesco
¡Estupendo! Ayudó en mi Galaxy S con androide 2.2. Convierta su comentario útil en una respuesta, para que la gente pueda votar por él.– java.es.para.escritorio
10 jun.