2011-01-22 12 views
19

He intentado que Android altere la imagen de fondo de una actividad, hasta ahora sin éxito. No tengo idea de lo que está mal.android: dither = "true" no tiembla, ¿qué ocurre?

Esto es lo que hice:

El elemento raíz de mi diseño es una actividad 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 añadí @ estirable/background_dither como imagen de fondo. pongo un archivo XML "background_dither.xml" en la embutición IPAP 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 en background.png dibujable-IPAP. La imagen, que incluye un gran degradado de color, se muestra, pero con bandas de colores intensos. Por lo que he aprendido del SDK, esto puede mitigarse usando la definición de imagen proxy/por encima junto con la especificación de android: dither = "true". Sin embargo, esto no tiene ningún efecto.

¿Qué me hace falta para que funcione el difuminado?

EDIT: Subida del sources here

EDIT2: Después de que ninguno de los métodos sugeridos ayudó a deshacerse de bandas de color, después de leer this blog post from Romain Guy tuve la idea de comprobar si mi fondo PNG tiene un canal alfa. No fue así. Después de agregar uno, Android realmente parece usar RGB8888, como se dijo en la publicación y el anillado se ha ido (también para 2.2). Todavía me pregunto por qué los otros métodos no funcionaron.

EDIT3: ¡Uno tiene que asegurarse de que PNG no solo tenga un canal alfa, sino también un píxel que tenga un valor alfa! = FF; de lo contrario, las herramientas de compilación de Android volverán a poner ese mapa de bits en un índice paleta sin canal alfa

Respuesta

0

Mucha gente que tiene el mismo problema informa que la configuración de setDither (verdadero) en su recurso dibujable en el código de Java funciona cuando el atributo XML no. En este caso, si puede obtener una referencia a LinearLayout en el método onCreate, intente

linearLayout.getBackground(). SetDither (true).

Una alternativa sería tratar de establecer un formato de píxel diferente como se describe aquí:

http://stuffthathappens.com/blog/2010/06/04/android-color-banding/

Buena suerte!

+0

Gracias. Intenté ambas opciones. Ninguno de ellos cambia la representación, así que supongo que todavía no funciona. :-( – machtnix

3

intenta poner esta línea

getWindow().setFormat(PixelFormat.RGBA_8888); 

justo después super.onCreate() y ver si ayuda.

+1

Gracias, pero lo siento, no, no vi ninguna diferencia. Cargué el código aquí http://rapidshare.com/files/444144083/lottofee.zip Tal vez alguien pueda detectar el problema. – machtnix

+0

No hay diferencia :( –

23

También se ha metido en este problema hoy y ha encontrado y utilizado su solución: Cree el png en photoshop con el conjunto de transparencias Y tenga al menos un píxel usando el alfa. En realidad, lo que hice fue establecer la capa en un 99% de opacidad. No afecta los colores ni nada y hace que el compilador de Android deje mi png solo.

+0

Esta es la respuesta correcta. Gracias, me ayudó mucho :) –

+0

¡Funcionó para mí, gracias! –

+0

¡Amigo, me gusta, gracias! – tokudu

0

En Android 2.2.1 y versiones posteriores, hay un error que causa que el tramado se deshabilite si el filtrado está habilitado. En Android 2.3.3 y 3.0, este problema parece estar solucionado.No estoy seguro si lo mismo podría ser cierto para los antialias que haya habilitado.

2

Tuve este problema también, lo arreglé aplicando la función de nueve parches a la imagen de fondo.

Espero que esta ayuda

Cuestiones relacionadas