How to erase previous drawing on Canvas?

自闭症网瘾萝莉.ら 提交于 2019-12-18 11:45:26

问题


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

回答1:


canvas.drawColor(0, Mode.CLEAR);

More info http://developer.android.com/guide/topics/graphics/index.html




回答2:


canvas.drawColor(0, Mode.CLEAR);



回答3:


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.


回答4:


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



回答5:


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



回答6:


canvas.drawColor(0, PorterDuff.Mode.CLEAR);

For more info Click here




回答7:


I wrote a function to help with this. Usually I set up a boolean to check if the page has changed, if it has, I call this function, using the return boolean to set my newpage boolean.

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

Color.TRANSPARENT isn't really needed in this, you could do with out.



来源:https://stackoverflow.com/questions/6956838/how-to-erase-previous-drawing-on-canvas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!