我正在将位图(球)绘制到 SurfaceView 画布上,然后在我绘制新位图(发光)以使其出现在球位图的顶部之后,我正在上下调整发光位图 alpha 以对其进行动画处理作为光泽/发光。但是闪耀位图在绘制时似乎有一些奇怪的像素错误,而且我给它的 alpha 越多,它就越糟糕。
看看这里的结果:那些蓝色/红色像素不存在于我使用的 png 中。
这是我对球对象的初始化:
sparklePaint = new Paint();
sparklePaint.setAlpha(0);
然后是我对球对象的动画方法:
public void doAnimate() {
if (sparkleAnimating) {
if (sparklePaint.getAlpha() == 255) {
sparkleOpcatyUp = false;
}
if (sparkleOpcatyUp) {
int opacity = sparklePaint.getAlpha() + sparkleOpacityStep;
if (opacity > 255) {
opacity = 255;
}
sparklePaint.setAlpha(opacity);
} else {
int opacity = sparklePaint.getAlpha() - sparkleOpacityStep;
if (opacity < 0) {
opacity = 0;
}
sparklePaint.setAlpha(opacity);
if (opacity == 0) {
sparkleOpcatyUp = true;
sparkleAnimating = false;
}
}
} else {
sparkleAnimTick++;
if (sparkleAnimTick == sparkleAnimDelay) {
sparkleAnimTick = 0;
sparkleAnimating = true;
}
}
}
在我的绘制循环中:
for (Ball ball : balls) {
if (ball != null && ball.getBitmap() != null) {
int[] pos = ball.getPos();
canvas.drawBitmap(ball.getBitmap(), pos[0], pos[1], null);
pos = ball.getSparklePos();
canvas.drawBitmap(ball.getSparkle(), pos[0], pos[1], ball.getSparklePaint());
ball.doAnimate();
}
}
关于这里出了什么问题的任何想法?这不是在另一个位图上绘制位图的方法吗?我需要设置一些混合模式吗?
该问题存在于模拟器和设备上。
谢谢索伦_