How to clear the contents of a painted canvas in Android?

I would like to clear the contents of the canvas after drawing some things on the screen.

How to completely clear the screen? Any code snippets on it will be helpful.

Thanks.

This is my code:

public class Panel extends SurfaceView implements SurfaceHolder.Callback { private ViewThread mThread; private ArrayList<Element> mElements = new ArrayList<Element>(); public Panel(Context context, AttributeSet attrs) { super(context, attrs); this.setBackgroundColor(Color.TRANSPARENT); this.setZOrderOnTop(true); //necessary getHolder().setFormat(PixelFormat.TRANSPARENT); getHolder().addCallback(this); mThread = new ViewThread(this); } public void doDraw(Canvas canvas) { super.onDraw(canvas); //canvas.drawColor(Color.TRANSPARENT); // canvas.drawColor(Color.argb(0, 255, 255, 255)); //canvas.drawColor(Color.rgb(-1, -1, -1)); //canvas.drawARGB(0, 255, 255, 255); synchronized (mElements) { for (Element element : mElements) { element.doDraw(canvas); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { if (!mThread.isAlive()) { mThread = new ViewThread(this); mThread.setRunning(true); mThread.start(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mThread.isAlive()) { mThread.setRunning(false); } } @Override public boolean onTouchEvent(MotionEvent event) { synchronized (mElements) { mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY())); } return super.onTouchEvent(event); } 

}

+4
source share
2 answers

Try the following:

 canvas.drawColor(0); //use 32bit hex like 0xffffffff for white 

or

 canvas.drawARGB(0, 0, 0, 0); //0-255 for each component 

This will clear the canvas in black. You can use any color you like.

+3
source

this code

 canvas.drawARGB(0, 0, 0, 0); 

make the canvas a black background

But if you want to completely clear the drawing and make the canvas background transparent , then execute this code

 Paint paint = new Paint(); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); Rect rect=new Rect(0,0,canvas_width,canvas_height); canvas.drawRect(rect,paint); 
+1
source

Source: https://habr.com/ru/post/1389126/


All Articles