Encontré el siguiente problema. Cuando una aplicación que se ejecuta en Ice Cream Sandwich carga un mapa de bits desde recursos, es probable que se represente incorrectamente como si se hubiera descodificado para el formato, que difiere del formato de ventana actual, sin aplicar dither. Sin embargo, ambos, el formato de decodificación y el formato de la ventana se han establecido de forma explícita:Los mapas de bits en ICS se cargan con un formato de píxeles incorrecto
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
y
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Aquí son capturas de pantalla del test app tomado de this article se ejecuta en el emulador con el ICS 4.0.3 (que da los mismos resultados en HTC HD2):
RGBA_8888
(32-bits) formato ventana, diversos formatos de descodificación de mapa de bits:
RGB_565
(16-bits) formato de la ventana, diversos formatos de descodificación de mapa de bits:
Varias cosas podrían ser notados: bandera
- El difuminado no se toma en cuenta de vez en cuando ;
- El formato de ventana predeterminado para ICS parece ser
RGB_565
; - La única buena gradiente de aspecto aparece con
RGB_565
formato ventana yRGBA_8888
formato de mapa de bits de decodificación .
Este problema también se ha informado en estas preguntas, pero todavía no hay solución se puede encontrar allí:
Awful background image quality in Android
La quistion es, cómo hacer frente a todos estos formatos en ICS, para ser más precisos, ¿cómo hacer que ICS cargue mapas de bits con el formato RGBA_8888
y cómo configurar el formato de ventana en RGBA_8888
para que estos mapas de bits se muestren correctamente?
¿Hay alguna diferencia entre el emulador y el dispositivo en estas condiciones? –
No, ambos muestran el mismo comportamiento –