我遇到了以下问题。在运行在冰淇淋三明治系统上的应用程序加载任何位图资源时,它很可能会以不正确的方式呈现,就好像已将其解码为与当前窗口格式不同但未应用抖动的格式。然而,解码格式和窗口格式都已被明确设置:
以下是从这篇文章中使用ICS 4.0.3模拟器(在HTC HD2上也会得到相同的结果)拍摄的测试应用程序的屏幕截图:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
并且
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
以下是从这篇文章中使用ICS 4.0.3模拟器(在HTC HD2上也会得到相同的结果)拍摄的测试应用程序的屏幕截图:
RGBA_8888
(32位)窗口格式,各种位图解码格式:
RGB_565
(16位)窗口格式,各种位图解码格式:
可以注意到几件事情:
- 有时候会忽略抖动标志;
- ICS的默认窗口格式似乎是
RGB_565
; - 唯一看起来好看的渐变是使用
RGB_565
窗口格式和RGBA_8888
位图解码格式。
这个问题也在以下问题中报告了,但仍然没有找到解决方案:
Awful background image quality in Android
问题是,如何处理ICS上的所有这些格式,更精确地说,如何使ICS加载具有RGBA_8888
格式的位图,并将窗口格式设置为RGBA_8888
,以便这些位图可以正确显示?