SurfaceView绘图用alpha颜色绘制

时间:2014-07-22 22:35:01

标签: android animation android-canvas surfaceview alpha

我有SurfaceView我正在使用基本ThreadCanvas设置运行动画。当我试图通过简单地将Paint上的alpha从0x22(34)减少到0x00(0)来尝试执行淡入淡出动画时,我发现了一件奇怪的事情。当动画运行时,似乎矩形不会平滑地消失;相反,它似乎跳过 alpha级别。我知道它与我的帧速率没有任何关系,因为我以60 FPS的速度运行它。认为这与我的实施方式有关,我让画布画出一条白色矩形条带,减少了alpha。这就是我得到的......

enter image description here

使用以下代码绘制图像:

private void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);

    Paint w = new Paint();
    w.setColor(Color.WHITE);

    Paint r = new Paint();
    r.setColor(Color.RED);
    r.setStrokeWidth(1.0f);

    for(int i = 0x22; i >= 0; i--) {
        w.setAlpha(i);
        int y = (0x22 - i) * 50;
        canvas.drawRect(0, y, 100, y + 50, w);
        canvas.drawLine(100, y, 110, y, r);
    }
}

可能很难看到,但看起来阿尔法在块中减少而不是平滑。您可以看出红线标记了一个新的矩形,但alpha似乎没有适当减少。我怀疑这就是为什么即使我以60 FPS运行,alpha动画看起来也不平滑的原因。有没有人以前经历过这个和/或知道如何在Canvas上使用SurfaceView获得平滑的alpha动画?

1 个答案:

答案 0 :(得分:1)

您需要调用mSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT)将曲面格式设置为RGBA 8888.否则,您将获得默认格式,即RGB 565。