How to erase previous drawing on Canvas?

2019-02-03 00:55发布

I have a background image (a map) on which I need to regularly draw the you-are-here icon. I use Canvas to draw the icon on top of the map. Assuming that the drawing process is triggered on button click (see code below), how can I erase the previous drawing?

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条回答
别忘想泡老子
2楼-- · 2019-02-03 01:14
canvas.drawColor(0, PorterDuff.Mode.CLEAR);

For more info Click here

查看更多
倾城 Initia
3楼-- · 2019-02-03 01:19

Try as below,it can be used to clear the canvas totally.

Declaration should be like this,

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

and while clearing use

    undonePaths.clear();
    paths.clear();
    invalidate();
查看更多
Animai°情兽
4楼-- · 2019-02-03 01:20
The star\"
5楼-- · 2019-02-03 01:25
canvas.drawColor(0, Mode.CLEAR);
查看更多
你好瞎i
6楼-- · 2019-02-03 01:29

Just fill in the canvas with a color or image:

canvas.drawColor(Color.BLACK);

If you want to keep certain elements and take certain elements away you can store these in an ArrayList. Then you can add and remove elements from this ArrayList when you want, and then iterate through them in 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);
}
查看更多
该账号已被封号
7楼-- · 2019-02-03 01:36
overlayBitmap.eraseColor(Color.TRANSPARENT);

This simply sets an existing Bitmap to all transparent.

I use this to "clear" a Bitmap object that I use to overlay on top of another to show a cropping window.

查看更多
登录 后发表回答