Android: dither = "true" no dither, lo que está mal?
He estado tratando de obtener android para templar 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:
- diseño con botones en un círculo?
- Establecer el diseño propio en la ventana emergente de android
- ¿Por qué ProgressBar detiene la animación mientras cambia el diseño en Android?
- Múltiples tamaños de widgets
- Creación de un botón personalizado con dos líneas de texto, cada una con una fuente diferente
El elemento raíz de mi distribución de actividades es 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 la 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 gradiente de color, se muestra, pero con bandas de color pesado. De lo que he aprendido del SDK, esto se puede mitigar usando la definición de imagen de / above proxy junto con especificar android: dither = "true". Sin embargo, esto no tiene ningún efecto.
¿Qué estoy perdiendo para conseguir trabajo de tramado?
EDIT
: Subido las fuentes aquí
EDIT2
: Después de que ninguno de los métodos sugeridos ayudó a deshacerse de las bandas de color, después de leer esta entrada del blog de Romain Guy tuve la idea de comprobar si mi fondo PNG tiene un canal alfa. No lo hizo. Después de añadir uno, androide en realidad parece utilizar RGB8888, como se dijo en el post y la banda se ha ido (también para 2.2). Todavía se preguntaba por qué los otros métodos no funcionaban.
EDIT3
: Uno tiene que asegurarse de que el PNG no sólo tiene un canal alfa, pero también al menos un píxel que tiene un valor alfa! = FF, de lo contrario las herramientas de compilación de Android de nuevo tira de ese mapa de bits a una paleta indexada sin canal alfa .
- Cambiar el nombre de la aplicación para Android
- cómo fijar el máx. longitud del texto en edittext control
- Agregar mediante programación una vista a medio de LinearLayout
- Android AlertDialog con esquinas redondeadas
- Atributo XML de la contraseña de Android: desaprobado
- Cierre del cursor en onPostExecute no produce nada
- Dibuja un círculo en el centro de la lona
- No se puede dibujar texto a la vista personalizada
Se metió en este problema también hoy y encontré y usé tu solución: Crear el png en Photoshop con el conjunto de transparencias Y tener al menos un píxel usando el alfa. En realidad lo que hice fue establecer la capa a un 99% de opacidad. No afecta a los colores ni nada y hacer que el compilador de Android deje mi png solo.
Trate de poner esta línea
getWindow().setFormat(PixelFormat.RGBA_8888);
Justo después de super.onCreate()
y ver si ayuda.
Tuve estos problemas también, he fijado la aplicación de nueve función de parche a la imagen de fondo.
Espero que esto ayude
Muchas personas que tienen el mismo problema informan que establecer setDither (true) en su recurso drawable 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
LineLayout.getBackground (). SetDither (true).
Una alternativa sería intentar establecer un formato de píxel diferente como se describe aquí:
http://stuffthathappens.com/blog/2010/06/04/android-color-banding/
¡Buena suerte!
En Android 2.2.1 y posterior hay un error que hace que el dithering se desactive 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 podría ser cierto para antialias como lo has habilitado.