programacion - android: dither="true" no dither, ¿qué pasa?
manual de programacion android pdf (5)
En Android 2.2.1 y versiones anteriores hay un error que hace que se desactive el tramado si el filtrado está habilitado. En Android 2.3.3 y 3.0, este problema parece estar solucionado. No estoy seguro de si lo mismo puede ocurrir con los antialias que ha habilitado.
He estado tratando de hacer que Android elimine la imagen de fondo de una actividad, hasta ahora sin éxito. No tengo ni idea de lo que está mal.
Esto es lo que hice:
El elemento raíz de mi diseño de actividad es un LinearLayout:
<LinearLayout android:id="@+id/AbsoluteLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:gravity="center_horizontal"
android:background="@drawable/background_dither">
donde agregué @ drawable / background_dither como imagen de fondo. Puse un archivo XML "background_dither.xml" en drawable-hdpi con el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/backimg"
android:src="@drawable/background"
android:dither="true"
android:antialias="true" />
que hace referencia a la imagen real background.png en drawable-hdpi. La imagen, que incluye un gran degradado de color, se muestra, pero con bandas de color gruesas. De lo que he aprendido del SDK, esto se puede mitigar utilizando la definición de imagen proxy / / junto con la especificación de android: dither = "true". Esto sin embargo, no tiene absolutamente ningún efecto.
¿Qué me estoy perdiendo para que el dithering funcione?
EDIT
: Subido las fuentes aquí
EDIT2
: después de que ninguno de los métodos sugeridos ayudara a deshacerse de las bandas de color, después de leer esta publicación del blog de Romain Guy , tuve la idea de comprobar si mi fondo PNG tiene un canal alfa. No lo hizo Después de agregar uno, Android en realidad parece usar RGB8888, como se dijo en el post y las bandas se han ido (también para 2.2). Todavía me pregunto por qué los otros métodos no funcionaron.
EDIT3
: Uno debe asegurarse de que el PNG no solo tenga un canal alfa, sino también al menos un píxel que tenga un valor alfa = FF; de lo contrario, las herramientas de compilación de Android volverán a dividir ese mapa de bits en una paleta indexada sin canal alfa .
Encontró este problema también hoy y encontró y usó su solución: cree el png en photoshop con el conjunto de transparencias Y teniendo al menos un píxel usando el alfa. En realidad, lo que hice es configurar la capa a una opacidad del 99%. No afecta los colores ni nada y hace que el compilador de Android deje mi png solo.
Intenta poner esta linea
getWindow().setFormat(PixelFormat.RGBA_8888);
Justo después de super.onCreate()
y ver si ayuda.
Muchas personas que tienen el mismo problema informan que la configuración de setDither (true) en su recurso dibujable en el código Java funciona cuando el atributo XML no lo hace. En este caso, si puede obtener una referencia a su LinearLayout en el método onCreate, intente
linearLayout.getBackground (). setDither (true).
Una alternativa sería intentar configurar un formato de píxeles diferente como se describe aquí:
http://stuffthathappens.com/blog/2010/06/04/android-color-banding/
¡Buena suerte!
También tuve estos problemas, arreglé la aplicación de la característica de nueve parches a la imagen de fondo.
Espero que esto ayude