2011-12-05 31 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(); 
}