tutorial studio android graphics

android - studio - ¿Es posible tramar un gradiente dibujable?



canvas android (3)

Estoy usando el siguiente dibujo:

<?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 obtengo bandas severas en dispositivos hdpi (como el Nexus One y el Droid) ya que el gradiente va desde la parte superior de la pantalla hasta la parte inferior.

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.


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

(Por la forma en que se ven los códigos, técnicamente podrías incluir el gradiente como el único elemento secundario de un <selector> y habilitar el difuminado en todo el selector; sin embargo, definitivamente es un truco).

No estoy seguro de que habilitar el dithering realmente resuelva su problema, ya que el dithering (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.


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 descubrí, después de probar <gradient> y todo tipo de Drawable s con varios atributos de dither y manualmente crear PNG difuminado, que si manualmente creaba una nueva imagen usando GIMP , y especificaba la densidad en este punto (es decir, explícitamente ingresando 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 PNG cuando se guarda termina siendo comparativamente grande (al menos para 240 ppp), pero se ve muy bien.


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 todas las ventanas están oscurecidas. 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?