如何删除Canvas中绘制的图像?

时间:2011-12-05 16:42:39

标签: android

如果我的代码是这样,我将如何删除画布上绘制的图像?我在哪里将删除过程放在这里?我尝试过使用canvas.drawColor(Color.BLACK);,但它无效。

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

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

尝试使用Paint对象..

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

答案 2 :(得分: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);

始终确保您没有设置会影响绘图行为的剪辑。

答案 3 :(得分:1)

当调用invalidate()(或来自其他线程的postInvalidate()时,随后会调用onDraw()来重绘图像的整个区域。传递给Canvas的{​​{1}}对象由一个已经为空的位图支持。

我意识到这不会直接回答你的问题,但是从阅读你的问题我想知道你是否误解了onDraw()invalidate()发生的事件顺序,以及事实每次给你一个空白onDraw()意味着你不需要删除它。

在我看来,你正在尝试建立代表屏幕Canvas的{​​{1}}向量。查看您的代码,在我看来,您可能希望通过清除Path对象中的所有段来清除所有绘制的图形。