如何擦除Canvas上的先前绘图?

时间:2011-08-05 13:12:30

标签: android canvas drawing

我有一张背景图片(地图),我需要定期绘制你在这​​里的图标。我使用Canvas在地图上绘制图标。假设在按钮点击时触发绘图过程(参见下面的代码),我该如何删除上一张图?

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);
}

7 个答案:

答案 0 :(得分:46)

canvas.drawColor(0, Mode.CLEAR);

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

答案 1 :(得分:18)

canvas.drawColor(0, Mode.CLEAR);

答案 2 :(得分:6)

overlayBitmap.eraseColor(Color.TRANSPARENT);

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

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

答案 3 :(得分:2)

只需用颜色或图片填充画布:

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);
}

答案 4 :(得分:1)

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

宣言应该是这样的,

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();

答案 5 :(得分:0)

Private Sub Workbook_Open()

'Application launch

Application.Visible = False 'Hide Excel window
EnableResize = False
Application.DisplayFullScreen = True 'Preset fullscreeen mode
Application.CommandBars("Full Screen").Enabled = False 'Hide command bars
WelcomeForm.Show 'Show welcome UserForm

End Sub

了解更多信息Click here

答案 6 :(得分:0)

我写了一个函数来帮助解决这个问题。通常我设置一个布尔值来检查页面是否已更改,如果有,我调用此函数,使用return boolean设置我的newpage布尔值。

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

Color.TRANSPARENT在这方面并不是真的需要,你可以不用。