我有SurfaceView
我正在使用基本Thread
和Canvas
设置运行动画。当我试图通过简单地将Paint
上的alpha从0x22(34)减少到0x00(0)来尝试执行淡入淡出动画时,我发现了一件奇怪的事情。当动画运行时,似乎矩形不会平滑地消失;相反,它似乎跳过 alpha级别。我知道它与我的帧速率没有任何关系,因为我以60 FPS的速度运行它。认为这与我的实施方式有关,我让画布画出一条白色矩形条带,减少了alpha。这就是我得到的......
使用以下代码绘制图像:
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动画?
答案 0 :(得分:1)
您需要调用mSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT)
将曲面格式设置为RGBA 8888.否则,您将获得默认格式,即RGB 565。