这里我需要删除paint.I我使用surfaceview.inside擦除按钮我使用下面的代码。现在,当我点击“擦除”按钮时,绘制的颜料全部被删除。但是现在再次绘制意味着油漆不可见。请任何人帮助我。
public void onClick(View view){
if(view==erasebtn)
{
if (!currentDrawingPath.isEmpty()) {
currentPaint .setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
action=true;
}
}
}
答案 0 :(得分:0)
如果要完全删除所有绘图,则必须使用“空”颜色填充它。
假设你有一个画画:
canvas.drawColor(Color.WHITE);
如果您在Canvas
中绘制了线条等,而您只是一直添加绘图,那么您需要创建一种方法来恢复旧版本。更改用于绘制内容的Paint
不会改变您已绘制的内容。它只影响未来绘图的完成方式。
有几种可能性,例如以下应该有效:
Bitmap bitmap = Bitmap.createBitmap(400, 400, null);
Canvas canvas = new Canvas(bitmap);
ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());
//save the state
bitmap.copyPixelsToBuffer(buffer);
// draw something
canvas.drawLine();
// restore the state
bitmap.copyPixelsFromBuffer(buffer):
这样你可以回到1状态。如果您需要撤消更多步骤,请考虑将位图保存到磁盘,否则会消耗相当多的内存。
另一种可能性是将您以数字方式绘制的所有步骤保存在列表中(如矢量图形),以便可以将整个图像重绘到某个点 - 然后您只需通过绘制即可撤消绘图列表的第一部分是新图像。
修改:如果您将其添加到代码并使用它代替undo()
,它会有效吗?
// add me to the code that has undo()
public void undoAll (){
final int length = currentStackLength();
for (int i = lenght - 1; i >= 0; i--) {
final DrawingPath undoCommand = currentStack.get( i );
currentStack.remove( i );
undoCommand.undo();
redoStack.add( undoCommand );
}
}