2011-12-05 48 views
1

如果我的代碼是這樣的,我將如何刪除畫布上繪製的圖像?我在哪裏將刪除過程放在這裏?我試過使用canvas.drawColor(Color.BLACK);,但它不工作。如何刪除Canvas中繪製的圖像?

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float eventX = event.getX(); 
    float eventY = event.getY(); 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     path.moveTo(eventX, eventY); 
     return true; 
    case MotionEvent.ACTION_MOVE: 
     path.lineTo(eventX, eventY); 
     break; 
    case MotionEvent.ACTION_UP: 
     // nothing to do 
     break; 
    default: 
     return false; 
    } 

    // Schedules a repaint. 
    invalidate(); 
    return true; 
} 
} 

回答

1

與噴漆的對象試試這個..

Paint paint = new Paint(); 
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
canvas.drawPaint(paint); 
paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 
+0

它是在這個代碼之後?公共SingleTouchEventView(上下文上下文,AttributeSet attrs){super(context,attrs); – user1081908

+0

謝謝!它幫助:) – nithinreddy

1
canvas.drawColor(0xff000000); // i can't see why it should not work except the clip rect mentioned below 

Paint paint = new Paint(); 
paint.setStyle(Style.FILL); 
paint.setColor(0xff000000); // Specify the drawing color here 
canvas.drawRect(0,0,w,h, paint); 

始終確保你沒有設置會影響繪圖行爲的剪輯。

+0

你好!謝謝:)我在哪裏可以專門放置canvas.drawColor?因爲我已經試過這個,但它不起作用:( – user1081908

+0

@ user1081908看到我編輯的答案 – slayton

+0

如果你把它作爲第一個命令在你的onDraw方法應該工作 –

1

invalidate()(或postInvalidate()從另一個線程)被調用,onDraw()隨後稱爲重新繪製圖像的整個區域。傳遞給onDraw()Canvas對象由一個已經空白的位圖支持。

我意識到這並不直接回答你的問題,但從閱讀你的問題我不知道你是否誤解了發生在invalidate()onDraw()發生的事件序列,以及你給了一個空白每次意味着你不需要擦除它。

在我看來,你正在做的是你試圖建立一個Path矢量代表屏幕MotionEvent s。仔細查看您的代碼,在我看來,您可能希望通過清除Path對象中的所有段來擦除所有繪製的圖形。

+0

非常感謝你。但我不知道爲什麼invalidate不起作用,或者它如何在我的應用程序上工作。我想要的是在繪製圖像之後,一旦我點擊屏幕並繪製另一圖像,繪製的圖像將被刪除。 – user1081908

2

舊的線程我知道,但我用API fingerpaint演示,想清除畫布但不填充純色(我有一個背景)。建立在@ coder_For_Life22答案上面我包括以下方法:

protected void clear(){ 
    Xfermode x = mPaint.getXfermode(); 
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    mCanvas.drawPaint(mPaint); 
    mPaint.setXfermode(x); 

    //Schedule redraw() 
    invalidate(); 
}