色带仅适用于 Android 4.0+
Posted
技术标签:
【中文标题】色带仅适用于 Android 4.0+【英文标题】:Color banding only on Android 4.0+ 【发布时间】:2012-04-06 09:47:24 【问题描述】:在运行 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+ 上?
非常令人费解。不知道有没有人能解释一下?
【问题讨论】:
Bitmaps on ICS are loaded with wrong pixel format的可能重复 感谢该链接...确实看起来像同样的问题。一些答案表明这可能只是一个模拟器问题,虽然没有明确的答案,但我现在打算这样做。 我遇到了完全相同的问题。我能够消除 v2.2+ 和 v2.3+ 上的问题,但不是 v4.0+ 我很想知道是否有人知道这个问题的解决方案? 我也遇到了这个问题,这弄乱了我捕获的屏幕截图。我什至在内置壁纸上也看到了这一点,所以部分问题肯定是由于 OpenGL ES 仿真的伪影(根据错误消息,我只能运行软件渲染器。也许硬件渲染器会缓解这个问题?):我是在真正的 Galaxy Nexus 上看不到这样的恐怖。 PS:对我来说,带有渐变背景的布局在Graphical Layout View
中看起来不错。
【参考方案1】:
试试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));
【讨论】:
【参考方案2】:打开模拟器“使用主机 GPU”选项为我解决了颜色问题,归功于这个答案 https://***.com/a/17166234/1287459
就我而言,我使用的是 Android 4.2.2。
【讨论】:
一个警告:使用“主机 GPU”时屏幕截图不起作用(它们变成黑色) 在我的情况下工作...我这样做是为了可以为 Google Play 获得一些不错的屏幕截图。以上是关于色带仅适用于 Android 4.0+的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台