2012-01-03 100 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