新建画布会删除旧画布上的内容吗?

3

请看标题

如果我在画布上使用drawCircle,但通过以下代码不断创建新画布,旧的圆形会消失吗?我知道这可能不是高效的做法,但我很好奇。

ImageView background = (ImageView) findViewById(R.id.Background);
Bitmap bitmap = Bitmap.createBitmap(500,500, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLUE);
canvas.drawCircle(point0,point1,10,paint);
background.setImageBitmap(bitmap)

谢谢


不会。但我猜你很快就会填满内存并出现OOM异常。 - Phantômaxx
我该如何不断地创建新的drawCircle,同时删除/擦除旧的? - Tom Hogan
我在线程的开头是否必须使用clearCircle?还是在线程中重复擦除?或者在线程中重复设置颜色为透明/清晰?您会如何建议处理这个问题?谢谢。 - Tom Hogan
1个回答

2

您不需要每次想要更改背景图像时都创建新的画布。只需使用已经存在的画布并在其上设置位图即可。

// Have your variables like this
ImageView background;
Bitmap bitmap;
Canvas canvas;

// Associate them to the respective views
background = (ImageView) findViewById(R.id.Background);
bitmap = Bitmap.createBitmap(500,500, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas();
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLUE);

// instead of creating a new canvas, just update the already existing with your bitmap
canvas.setBitmap(bitmap);
canvas.drawCircle(point0,point1,10,paint);
background.setImageBitmap(bitmap)

更新:感谢@Doomsknight的指正 如果你想要清除画布,你可以简单地执行以下操作:

canvas.drawColor(Color.White);

并且它将擦除所有绘制的内容。


我不想设置背景图片。我明白了。我希望更新(并擦除/删除旧的)drawCircle。谢谢 :) - Tom Hogan
1
@TomHogan 如果你想清空画布,可以使用 canvas.drawColor(Color.White);。如果你只是想把它变成一片空白,不要创建一个新的画布。如果你想要删除圆形,则可以清除画布,并重新绘制所有内容。或者使用第二个位图来存储没有圆形的图像,然后将其绘制回去。 - IAmGroot
1
canvas.drawColor(Color.White); 会让画布变成白色。这可能是 OP 想要的,也可能不是。 - Phantômaxx
那么,如果我在一个每秒重复一次的线程中,如果我在线程开头使用canvas.drawColor(Color.White),并在结尾处使用canvas.drawCircle,它会起作用吗? - Tom Hogan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接