13

在运行 Android 4.0 或 4.0.3 的模拟器上,我看到可怕的色带,我似乎无法摆脱。在我测试过的所有其他 Android 版本上,渐变看起来都很平滑。

我有一个配置为 RGBX_8888 的 SurfaceView,并且呈现的画布中不存在条带。如果我通过在渲染结束时叠加噪声模式来手动抖动图像,我可以使渐变再次平滑,但显然会以牺牲性能为代价,而我宁愿避免这样做。

因此,稍后会引入条带。我只能假设,在 4.0+ 上,我的 SurfaceView 在绘制和显示之间的某个点被量化到较低的位深度,我可以从屏幕截图中看到渐变一次步进 8 个值每个通道,建议量化为 555(不是 565)。

我在我的 Activity onCreate 函数中添加了以下内容,但没有任何区别。

getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

我也尝试将上述内容放在 onAttachedToWindow() 中,但仍然没有任何变化。

(我相信 RGBA_8888 无论如何都是 2.2 及更高版本的默认窗口格式,因此明确设置该格式对 4.0+ 没有影响也就不足为奇了。)

这留下了一个问题,如果源是 8888 而目标是 8888,那么引入量化/条带的原因是什么,为什么它只出现在 4.0+ 上?

非常令人费解。我想知道是否有人可以提供一些启示?

4

2 回答 2

2

试试看..

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options);

findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient));
于 2012-11-21T16:58:32.397 回答
0

打开模拟器“使用主机 GPU”选项为我解决了颜色问题,归功于这个答案https://stackoverflow.com/a/17166234/1287459

就我而言,我使用的是 Android 4.2.2。

于 2013-07-30T06:14:44.370 回答