我正在尝试在TextureView中绘制渐增的圆圈。所有圈子的中心都是一样的。然后我尝试增加绘制的圆,直到达到特定限制。然后我想清理画布并重新开始。但是使用我的代码(见下文),画布似乎永远不会被清除。实际上它应该被清除时很快闪烁白色,但是当下一个循环中的第一个圆圈被绘制时(在尝试清除画布之后),所有先前的圆圈重新出现并且整个动画似乎变得疯狂。让它运行几秒后,我留下了几十个圆圈(有些重叠),而不是每个循环只有大约4个圆圈。此外,他们没有我给他们的半径(基本上我的代码最终绘制了无数个随机大小的圆圈)。花了好几天尝试不同的东西,但似乎没有任何帮助。
这是我的代码:
paint.setColor(Color.argb(opac, 177, 177, 177));
stroke = 5;
paint.setStrokeWidth(stroke);
radius = 10;
Canvas canvas = new Canvas();
Boolean clear = false;
//Added these two lines following advice from a previous answer:
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
while (mRunning && !Thread.interrupted()) {
canvas = mSurface.lockCanvas(null);
try {
if(clear){
canvas.drawPaint(clearPaint); //This line should clear the canvas.
clear = false;
}else{
canvas.drawCircle(circleX, circleY, radius, paint);
}
} finally {
mSurface.unlockCanvasAndPost(canvas);
}
if(radius+15 <= circleY-stroke/2){
radius+=15;
}else{
radius = 10;
clear = true;
}
try {
Thread.sleep(360);
} catch (InterruptedException e) {
// Interrupted
}
如果有人可以帮助我,我会非常感激。由于这个问题,我现在无法继续我的项目数周。
答案 0 :(得分:2)
创建一个新的绘制实例,仅用于清除画布
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
在用于清除画布的if()块中,使用上面的Paint
实例绘制它if(clear){
canvas.drawPaint(clearPaint);
clear = false;
}