Если вы хотите полностью стереть весь рисунок, вы должны залить его «пустым» цветом.
Если у вас есть холст, на котором вы рисуете:
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 );
}
}