2012-01-03 52 views
4

我想在屏幕上绘制某些东西后清除画布的内容。如何清除Android中绘制的画布的内容?

我怎么完全清除屏幕?任何代码片段都会有所帮助。

谢谢。

这是我的代码:

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

}

回答

3

试试这个:

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

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

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

+0

我已经添加了上面的代码,如何从其他活动中清除画布 – Karthik 2012-01-03 18:43:32

+0

恐怕我不太赞同您的意见。谨慎阐述? – kostja 2012-01-03 18:52:44

+0

我得到上面的片段使用,我有在xml.For reredrawing图像上面的帆布竟被我想清楚,已经绘制area.How做其他活动,因为这是SurfaceView – Karthik 2012-01-03 18:57:39

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 2013-08-23 16:29:41

+1

同样的问题在这里,背景保持黑色而不是透明 – 2014-02-16 02:31:46