我的问题是,在SurfaceView
内绘制一个简单的测试图像(带有渐变填充的矩形)时,渐变具有颜色条带。在简单的扩展View
中绘制具有相同渐变的完全相同的矩形时,渐变看起来非常平滑,并且与我期望的32位颜色一样好。
这是在同一SurfaceView
的同一布局中使用与测试View
一起放置的测试Activity
并排发生的。
有关信息,我在Activity
类中调用window.setFormat(PixelFormat.RGBA_8888)
将Activity切换为32位颜色,因为这是过去消除渐变中条带的解决方案(但是,我相信这在某个Android级别不再需要,其中32位是默认值)。我的minSdkVersion
是8。
简单扩展onDraw()
和View
的{{1}}中显示的测试代码为:
SurfaceView
以下屏幕截图显示了上面的 Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(false);
paint.setFilterBitmap(false);
paint.setDither(false);
Shader shader = new LinearGradient(
0,
0,
0,
200,
new int[]{0xff150d2f,0xff432b96},
null,
Shader.TileMode.CLAMP
);
paint.setShader(shader);
canvas.drawRect(0,0,getWidth(),getHeight(), paint);
和正常的SurfaceView
。我意识到这个例子中的条带非常微妙;当渐变扫过较小的色带时,情况更加明显。
有什么建议吗?
Trev
答案 0 :(得分:12)
最后通过将其添加到SurfaceView
的构造函数中来找到解决方案:
getHolder().setFormat(PixelFormat.RGBA_8888);