我遇到了以下问题.当任何位图从资源由冰淇淋三明治运行的应用程序加载时,它可能会被不正确地,如果它已经被解码的格式,这不同于当前窗口的格式,在没有施加抖动呈现.但是,解码格式和窗口格式都已明确设置:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
Run Code Online (Sandbox Code Playgroud)
和
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Run Code Online (Sandbox Code Playgroud)
以下是从使用ICS 4.0.3的仿真器上运行的本文中获取的测试应用程序的屏幕截图(它在HTC HD2上提供相同的结果):
RGBA_8888(32位)窗口格式,各种位图解码格式:

RGB_565(16位)窗口格式,各种位图解码格式:

有几点可以注意到:
RGB_565;RGB_565 窗口格式和RGBA_8888 位图解码格式出现唯一好看的渐变.在这些问题中也报告了这个问题,但仍然没有找到解决方案:
渐变兼容性问题 - ICS默认的颜色比以前的所有Android版本都少
该quistion是,如何处理所有这些格式在ICS,更准确地说,如何使ICS负载与位图RGBA_8888格式,以及如何设置窗口格式RGBA_8888,以便这些位图显示正确?
在我运行Android 5.0.1的LG G Watch上,我一直在努力让渐变显得平滑.
在你标记为重复之前,我已经尝试了几个帖子的每个答案(比如为什么android在显示png文件时会丢失图像质量?,是否可以抖动渐变可绘制?,android:dither ="true"不会抖动,有什么不对?,彩色条带Android解决方案,色带,并与梯度文物尽管使用RGBA_8888无处不在,颜色只能在Android 4.0以上版本的条带,在Android的可怕的背景图像质量),但似乎都不适用.
1)从最新的Android SDK加载示例'Wearable:Watch View Stub'项目
2)将rect_background.xmldrawable 更改为:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/rect_corner_radius"/>
<gradient android:startColor="@color/light_grey"
android:endColor="@color/white"
android:angle="90"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
3)这是仿真器上的样子

4)这是我从设备进行屏幕捕获时的样子:

5)但是当我亲眼看到它时,有一种可怕的条纹:(在现实生活中看起来更糟糕;图像不公正)

以下是亲眼看到的模拟图像(128种颜色):

我也尝试过:
使用100质量的jpeg.
在创建布局之前和之后,在Activity中手动将PixelFormat设置为RGBA_8888
所有这些都以同样的方式出现.
还有其他人看到这个问题吗?根据这个网站,LG G Watch的颜色深度为24位,每通道应为8位.设备上的正常图像显示正确 - 没有明显的条带.
我正在使用类似下面的drawables作为渐变背景:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#ffffff"
android:endColor="#cccccc"
android:angle="-90"
android:dither="true" />
</shape>
Run Code Online (Sandbox Code Playgroud)
这会在模拟器上产生带状渐变,当我拍摄模拟器的截图(使用Eclipse)时,结果甚至更差:

为什么?以及如何解决这个问题?这是虽然我使用android:dither="true"的可绘XML,并在此设置Activity的onCreate():
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,蓝色部分是原生动作栏,灰色渐变是ListView背景可绘制的行.