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 elonAttachedToWindow
mé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
layerType
quesoftware
, 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