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

Tre*_*vor 7 android surfaceview

我的问题是,在a中绘制一个简单的测试图像(带有渐变填充的矩形)时SurfaceView,渐变具有颜色条带.当在简单的扩展中绘制具有相同渐变的完全相同的矩形时View,渐变看起来非常平滑,并且与我期望的32位颜色一样好.

这是在相同的布局内使用与测试SurfaceView一起放置的测试并排发生的.ViewActivity

有关信息,在Activity课程中我window.setFormat(PixelFormat.RGBA_8888)打算将Activity切换为32位颜色,因为这是过去消除渐变中的条带的解决方案(但是,我相信在某个Android级别不再需要这个) 32位是默认值).我minSdkVersion8岁.

出现在onDraw()简单扩展View和以下的测试代码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);
Run Code Online (Sandbox Code Playgroud)

以下是显示SurfaceView上述和正常情况View下的屏幕截图.我意识到这个例子中的条带非常微妙; 当渐变扫过较小的颜色带时,它会更加明显.

截图

有什么建议吗?

崔佛

Tre*_*vor 12

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

getHolder().setFormat(PixelFormat.RGBA_8888);
Run Code Online (Sandbox Code Playgroud)