2012-03-16 4 views
0

페인트를 제거해야합니다. 나는 아래의 코드를 사용하여 surfaceview.inside 지움 버튼을 사용하여 페인트를 사용했습니다. 이제 지우개 단추를 클릭하면 지워진 도료가 모두 지워집니다.하지만 이제 다시 그립니다. 그림이 보이지 않습니다. 아무도 도와주세요.안드로이드의 표면보기로 페인트를 제거하는 방법

public void onClick(View view){ 
    if(view==erasebtn) 
      { 
       if (!currentDrawingPath.isEmpty()) { 
     currentPaint .setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
     action=true; 
    } 
      } 
} 

답변

0

모든 그림을 완전히 지우려면 "빈"색으로 채워야합니다. 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); 
    } 
} 
+0

이 example.http 같이 사용하고 있습니다 : //stackoverflow.com/questions/9720432/how-to-erase-paints-on-drawingsurface-in를 -android – user1235232

+0

시도 { \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

+0

그래, DrawingSurface는 http://www.tutorialforandroid.com/2010/11/drawing-with-canvas-in-android-undoredo.html 맞춤 수업입니까? 그것은 벡터 드로잉 접근 방식으로 구현되어 있습니다.이 예제의 코드를 보면'undo()'와'redo()'가 있습니다. – zapl

관련 문제