如何在Android中清除绘制的画布内容?

4

在屏幕上绘制了某些内容后,我希望清除画布的内容。

如何完全清除屏幕?任何相关的代码片段都将非常有用。

谢谢。

这是我的代码:

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

}

2个回答

5
尝试这样做:
canvas.drawColor(0); //use 32bit hex like 0xffffffff for white

或者

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

这将用黑色清除画布。您可以使用任何您喜欢的颜色。


我已经添加了上面的代码,如何从其他活动清除画布。 - Karthik
很抱歉,我不太明白你的评论。能详细说明一下吗? - kostja
我使用上面的代码片段,在xml中将Canvas放在图像之上。为了重新绘制,我想清除已经绘制的区域。由于这是SurfaceView,如何从其他活动中进行清除? - Karthik
对于 canvas.drawARGB(0,0,0,0,),你可以将背景颜色放在最后一个参数中。这样看起来就像所有内容都被清除了,而背景保持不变。 - Shadman Akhtar

1
这段代码
canvas.drawARGB(0, 0, 0, 0);

将会使画布背景变为黑色,

但是如果你想完全清除绘图并且使画布背景透明,请按照以下代码进行操作

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

6
为什么使用这个代码(或 canvas.drawColor(0, PorterDuff.Mode.CLEAR))时,我的背景仍然是黑色而不是透明的? - cadavre
1
这里也有同样的问题,背景仍然是黑色而不是透明的。 - James Zhang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接