如何清除canvas上的以前的绘图?

我有一个背景图像(地图),我需要定期绘制你在这​​里的图标。 我使用canvas在地图上绘制图标。 假设绘图过程是在点击button时触发的(请参阅下面的代码),如何擦除之前的绘图?

private void displayUserPos(Point userPos) { Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.ic_yah); canvas.drawBitmap(marker, (float)userPos.getX(), (float)userPos.getY(), null); imgView.setImageBitmap(fmOverlay); } 

Solutions Collecting From Web of "如何清除canvas上的以前的绘图?"

 canvas.drawColor(0, Mode.CLEAR); 

更多信息http://developer.android.com/guide/topics/graphics/index.html

 canvas.drawColor(0, Mode.CLEAR); 
 overlayBitmap.eraseColor(Color.TRANSPARENT); 

这只是将现有的位图设置为全透明。

我用它来“清除”我用来叠加在另一个之上的Bitmap对象来显示裁剪窗口。

只需用颜色或图像填充canvas:

 canvas.drawColor(Color.BLACK); 

如果你想保留某些元素,并拿走某些元素,你可以将它们存储在一个ArrayList中。 然后,您可以在需要时添加和移除此ArrayList中的元素,然后在onDraw()中遍历它们。

 for (Iterator<GraphicObject> it = _graphics.iterator(); it.hasNext();) { GraphicObject graphic = (GraphicObject)it.next(); coords = graphic.getCoordinates(); canvas.drawCircle(coords.getX(), coords.getY(), (float)coords.getRadius(), paint); } 

尝试如下,它可以用来完全清除canvas。

宣言应该是这样的,

 ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>(); ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>(); 

并在清除使用

  undonePaths.clear(); paths.clear(); invalidate(); 
 canvas.drawColor(0, PorterDuff.Mode.CLEAR); 

欲了解更多信息点击这里

我写了一个函数来帮助这个。 通常我设置一个布尔值来检查页面是否已经改变,如果有的话,我调用这个函数,使用返回布尔值来设置我的newpage布尔值。

  private boolean clearCanvas(Canvas canvas){ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); return false; } 

Color.TRANSPARENT不是真的需要在这个,你可以做出来。