android - programacion - gradiente suave en diferentes dispositivos
manual de android en pdf (4)
En mi aplicación tengo degradado como dibujable que estoy usando 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.
¿Cuál es la forma correcta de suavizar mi degradado en todos los dispositivos en los que se ejecutará mi aplicación?
PD: encontré algunos temas relacionados
Cómo dibujar un degradado suave / difuminado en un lienzo en Android
Si la configuración de Dither y RGBA_888 no ayuda en algunos teléfonos, la solución puede ser establecer el elemento layerType
en el software
para desactivar la aceleración de hardware
android:layerType="software"
Esto solucionó mi problema en un teléfono Samsung S5.
Abra su imagen en Photoshop (o Gimp o Paint.NET o lo que sea) y agregue una pequeña cantidad de ruido. Entonces no tienes que hacer nada en el código.
Cuando cargue su imagen, configure pixelFormat en RGB_565 y setDither en verdadero, si lo está dibujando directamente a la pantalla sin ninguna 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.
Puedes usar una forma personalizada (ponerla en /drawable/gradient.xml o algo así):
<?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, será pintado por el sistema operativo y debe ser perfectamente liso.