如果我的代码是这样,我将如何删除画布上绘制的图像?我在哪里将删除过程放在这里?我尝试过使用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;
}
}
答案 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
对象中的所有段来清除所有绘制的图形。