我有一个SurfaceView,它使用基本的Thread和Canvas设置来运行动画。当我试图执行淡色动画时,我注意到了一件奇怪的事情:简单地将Paint上的alpha从0x22 (34)降到0x00 (0)。当动画运行时,似乎矩形没有平滑地褪色;相反,它似乎跳过alpha级别。我知道这和我的帧率没有任何关系,因为我在测量的60 FPS运行它。考虑到这与我的实现方式有关,我让画布画出一条带有递减α的白色矩形。这就是我得到的..。

图像是用以下代码绘制的:
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。以前有人经历过这种情况吗?或者我知道如何在Canvas上使用SurfaceView获得平滑的alpha动画。
发布于 2014-07-23 17:37:21
您需要调用mSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT)将表面格式设置为RGBA 8888。否则,您将得到默认格式,即RGB 565。
https://stackoverflow.com/questions/24899012
复制相似问题