2010-07-26 8 views
15

En mi aplicación tengo gradiente como dibujable que estoy utilizando como fondo y no quiero que se vea lo más suave posible. Después de buscar en Google e intentarlo solo, se me ocurrió lo siguiente. En el nexo uno si solo llama a setDither (verdadero), su gradiente sigue en bandas, por lo que debe establecer PixelFormat como este Window.setFormat (PixelFormat.RGBA_8888). Pero, por otro lado, G1 no es compatible con RGBA_8888 por lo que llamarlo hace que el gradiente sea incluso más feo que antes, por lo que Window.setFormat (PixelFormat.RGBA_8888) no funcionará bien en dispositivos que no lo admiten.gradiente suave en diferentes dispositivos

¿Cuál es la forma correcta de suavizar mi gradiente en todos los dispositivos en los que se ejecutará mi aplicación.

PD: He encontrado algunos temas relacionados

How to draw a smooth/dithered gradient on a canvas in Android

Is it possible to dither a gradient drawable?

Respuesta

2

Abra su imagen en Photoshop (o Gimp o Paint.NET o lo que sea) y añadir una pequeña cantidad de ruido. Entonces no tienes que hacer nada en el código.

+0

gracias su trabajo para mí ........ :) – yokees

1

Al cargar su imagen, configure pixelFormat a RGB_565 y setDither a verdadero, si lo está dibujando directamente a la pantalla sin otra modificación.

Las pantallas normalmente no son de 24 bits, que por lo general deberían ser lo suficientemente buenas, al menos bastante consistentemente por todas partes.

No necesita usar 8888 si no necesita el alfa y no modificará los datos de la imagen. Se mostrará en el 99% de las pantallas móviles como color de 16 bits y no de 24 bits, ya que es lo que admiten los paneles.

N1 siempre tendrá problemas de cerca porque la matriz que usan para el panel tiene el doble de resolución verde.

+0

Sí, estoy usando el mismo enfoque ... realmente se ve bastante bien en la mayoría de los dispositivos. Gracias –

2

Se puede utilizar una forma personalizada (pones en /drawable/gradient.xml o algo por el estilo):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:startColor="#000000" 
    android:endColor="#ffffff" 
    android:angle="90"/> 
</shape> 

De esta manera, se dibujarán por el sistema operativo y debe ser perfectamente lisa.

0

Si el tramado y el ajuste RGBA_888 no ayudan en algunos teléfonos, la solución puede ser establecer el elemento layerType a software, para desactivar la aceleración de hardware

android:layerType="software" 

Esto fija mi problema en un Samsung S5 teléfono.

Cuestiones relacionadas