모든 그림을 완전히 지우려면 "빈"색으로 채워야합니다. Canvas
에서 등
canvas.drawColor(Color.WHITE);
당신이 그린 경우 라인을 당신이 당신의 그림을 추가 할 경우 모든 시간을 당신이 이전 복원 할 수있는 방법을 만들어야합니다
당신이 그릴 수있는 캔버스를 가정 그것의 버전. 무언가를 그리는 데 사용한 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 상태로 돌아갈 수 있습니다. 더 많은 단계를 실행 취소해야한다면 Bitmaps를 디스크에 저장하는 것이 좋습니다. 그렇지 않으면 많은 메모리를 소비하게됩니다.
또 다른 가능성은 전체 이미지를 특정 지점까지 다시 그리는 방식으로 숫자로 그려진 모든 단계를 목록 (벡터 그래픽과 같은)에 저장하는 것입니다. 그런 다음 그림을 그리면 그냥 원래대로 되돌릴 수 있습니다 귀하의 목록의 첫 번째 부분은 신선한 이미지로.
편집 : 코드에 추가하여 undo()
대신 사용하면 효과가 있습니까? thkyou이 response.but을 위해 내가 bitmap.i를 사용하고 있지 않다
// 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);
}
}
이 example.http 같이 사용하고 있습니다 : //stackoverflow.com/questions/9720432/how-to-erase-paints-on-drawingsurface-in를 -android – user1235232
시도 { \t mBitmap.eraseColor (android.graphics.Color.TRANSPARENT); \t 캔버스 캔버스 = 새로운 캔버스 (mBitmap); \t \t action = true; \t \t \t myview.onDraw (Canvas); \t \t \t \t \t \t \t \t} 캐치 (예외 : IllegalStateException 예) { \t \t \t \t \t ie.printStackTrace();} 내가 지금 작업 기능을 삭제 같이 사용하고 있습니다하지만 난 점점 아니에요 취소하는 방법에 대해 설명합니다. – user1235232
그래, DrawingSurface는 http://www.tutorialforandroid.com/2010/11/drawing-with-canvas-in-android-undoredo.html 맞춤 수업입니까? 그것은 벡터 드로잉 접근 방식으로 구현되어 있습니다.이 예제의 코드를 보면'undo()'와'redo()'가 있습니다. – zapl