渐变在SurfaceView中显示为带状,但在普通视图中看起来非常平滑

时间:2011-10-15 00:23:24

标签: android surfaceview

我的问题是,在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。我意识到这个例子中的条带非常微妙;当渐变扫过较小的色带时,情况更加明显。

Screenshot

有什么建议吗?

Trev

1 个答案:

答案 0 :(得分:12)

最后通过将其添加到SurfaceView的构造函数中来找到解决方案:

getHolder().setFormat(PixelFormat.RGBA_8888);