2013-12-16 2 views
1

View.onDraw()은 드로잉 전에 캔버스를 지워 버리는 것에 놀랐습니다. 이것은 내가 원하는 것이 아닙니다. 앞의 도면을 유지하여 각 호출 중에 이전 도면 위에 변경 사항 만 그릴 필요가있는 좋은 방법은 무엇입니까? 예를 들어 당신이 그것을 스 와이프 또는 그 위에 다른 View Z의 경우Android View.onDraw()에서 드로잉 변경 만 가능

public void invalidate(Rect dirty) 
public void invalidate(int l, int t, int r, int b) 

그러나 더 가능성이 View은, 모든 방법을 다시 그려집니다 :

+0

잘 모르겠지만 배경 drawable을 null로 설정하면 배경이 지워지지 않을 수 있습니다. 또한 시도 할 또 다른 것은 super.onDraw()를 호출하지 않는 것입니다. –

답변

0

SurfaceView를 구현했습니다. 그런 다음 자신 만의 비트 맵과 캔버스를 만들어 화면에 그려서 비트 맵을 화면에 그립니다. 예를 들어

:

private Canvas myCanvas = null; 
private Bitmap myCanvasBitmap = null; 
private Matrix identityMatrix; 

public mySurfaceCreated(canvasWidth, canvasHeight){ 
    myCanvasBitmap = Bitmap.createBitmap(canvasWidth, canvasHeight, Bitmap.Config.ARGB_8888); 
    myCanvas = new Canvas(); 
    myCanvas.setBitmap(myCanvasBitmap); 
    identityMatrix = new Matrix(); 
} 

public void myDraw(Canvas canvas) { 
    // Draw stuff onto myCanvas, NOT the canvas given by the android OS. 
    drawStuff(myCanvas); 
    // Draw onto the canvas given by the android OS. 
    canvas.drawBitmap(myCanvasBitmap, identityMatrix, null); 

} 

나는 캔버스 전체 매번 그릴 필요가 없습니다이 방법 대신에만 필요한 변경. OS에서 생성 된 캔버스는 매번 완전히 그려집니다.

0

는 API를 몇 무효화보기 위해 더러운하는 구형을 정의 할 수 있습니다 주문은 무효화됩니다.

setDrawingCacheEnabled을 사용해도되고 직접 그리는 경우 Bitmaps을 그려야합니다.