studio - Android: el uso de degradado lineal como fondo se ve anillado
herramienta degradado psd (7)
Como Romain Guy sugiere:
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);
}
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>
Así que lo aplico a mi ListView con:
android:background="@drawable/shape_background_grey"
Funciona, pero se ve muy "en bandas" en el emulador y en un dispositivo real también.
¿Hay alguna manera de reducir este "comportamiento"?
Lo único que funcionó para mí fue establecer un canal alfa ligeramente transparente tanto en el color de inicio como en el color de fin.
<?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>
Tengo la idea de intentar esto a partir de esta otra pregunta SO: android: dither = "true" no tiembla, ¿qué ocurre?
Para mí en HTC Desire funciona así
window.getDecorView().getBackground().setDither(true);
Para mí, la banda desapareció cuando configuré el 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 traté de usar una lista de capas con un "ruido" dibujable para eliminar las bandas, pero todavía hay 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 drawable "noise_repeater" que creé y usé
Pon esto en tu Actividad:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Window window = getWindow();
window.setFormat(PixelFormat.RGBA_8888);
}
Si la configuración de Dither y RGBA_888 no ayuda en algunos teléfonos, la solución puede ser establecer el elemento layerType
en el software
para desactivar la aceleración de hardware
android:layerType="software"
Esto solucionó mi problema en un teléfono Samsung S5.
Simplemente puede habilitar el tramado en su objeto Drawable.