在运行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 +上?
非常令人费解。我想知道是否有人可以发光?
答案 0 :(得分:2)
尝试dis ..
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));
答案 1 :(得分:0)
打开模拟器“使用主机GPU”选项为我修复了颜色问题,可以归功于这个答案https://stackoverflow.com/a/17166234/1287459
就我而言,我使用的是Android 4.2.2。