2010-05-07 11 views
20

estoy usando el siguiente dibujable:¿Es posible tramar un degradado dibujable?

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    > 

    <gradient 
     android:startColor="@color/content_background_gradient_start" 
     android:endColor="@color/content_background_gradient_end" 
     android:angle="270" 
     /> 

</shape> 

El problema es que me sale de bandas severa en los dispositivos IPAP (como el Nexus One y Droid), ya que el gradiente va desde la parte superior de la pantalla hasta el fondo .

De acuerdo con http://idunnolol.com/android/drawables.html#shape_gradient no hay un atributo "dither" para un degradado. ¿Hay algo que pueda hacer para suavizar el degradado?

Nota: agregar dither = "true" a la forma no parece funcionar.

Respuesta

11

Escribí la documentación que mencionaste. He echado otro vistazo al código y desafortunadamente no hay manera de habilitar el difuminado en un GradientDrawable excepto llamando explícitamente al GradientDrawable.setDither() en el código.

(La forma en que los códigos se ve, técnicamente que podría incluir el degradado como el único hijo de un <selector>, y permitir el tramado en todo el selector;. Sin embargo, es sin duda un hack)

I No estoy convencido de que el difuminado realmente resuelva su problema, ya que el tramado (al menos como se señala en los documentos oficiales de Android) sirve para resolver problemas de bandas cuando el dispositivo tiene una paleta de colores demasiado pequeña. Esto parece ser un problema de bandas debido al tamaño del degradado.

2

Me enfrenté a un problema muy similar el año pasado y no obtuve ninguna conclusión útil en la lista de desarrolladores de Android.

Sin embargo, hace un tiempo he descubierto — después de probar <gradient> y todo tipo de Drawable s con varios dither atributos y de forma manual crear archivos PNG interpolados — que si puedo crear manualmente una nueva imagen usando GIMP y especificar la densidad en este momento (es decir, que ingresa explícitamente 120, o 240, etc.) al crear la imagen, se ve muy bien, incluso en dispositivos hdpi. Y esto a pesar de ser un gradiente en escala de grises, con no tantos colores.

El archivo PNG, cuando se guarda, termina siendo comparativamente grande (al menos para 240 ppp), pero se ve muy bien.

7

Hola a todos, tengo el mismo problema, hay una solución que funciona pero no es muy buena.

getWindow().setFormat(PixelFormat.RGBA_8888); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); 

Funciona para mí, pero el problema es que toda la ventana está titubeante. Estaba buscando encontrar una manera de oscilar solo el gradiente pero no pude encontrar nada. android: dither = "true" en xml no funciona y GradientDrawable.setDither (true) tampoco funciona. ¿Alguna idea de cómo puedo alterar solo el gradiente?

+0

¡La respuesta seleccionada no me ayudó, la tuya sí! Tener un Galaxy S con Android 2.2. –

Cuestiones relacionadas