2012-06-15 7 views
3

저는 onDraw 함수에서 getDrawingCache를 호출합니다. 문제는 처음에만 캔바스에 대한 변경 사항을 포함하고 그 이후에는 새로운 변경 사항으로 전혀 업데이트되지 않는다는 것입니다. 여기에 내 코드입니다 :getDrawingCache가 업데이트되지 않았습니다.

 paintAction.draw(canvas); 
     if (paintAction.isPermanentChange()) 
     { 
      Bitmap partialBitmap=getDrawingCache(); 
      int numColored=0; 
      for (int index1=0;index1<partialBitmap.getWidth();index1++) 
      { 
       for (int index2=0;index2<partialBitmap.getHeight();index2++) 
       { 
        if (partialBitmap.getPixel(index1,index2)==0xFF000000) 
         numColored++; 
       } 
      } 
      Log.i("PaintDroid","Bitmap pixels: " + numColored); 
      int areaWidth=partialBitmap.getWidth()-SCROLLBAR_SIZE; 
      int areaHeight=partialBitmap.getHeight()-SCROLLBAR_SIZE; 
      int[] pixels=new int[areaWidth*areaHeight]; 
      partialBitmap.getPixels(pixels,0,areaWidth,0,0,areaWidth, 
        areaHeight);  
      numColored=0; 
      for (int index=0;index<pixels.length;index++) 
       if (pixels[index]==0xFF000000) numColored++; 
      Log.i("PaintDroid","Pixels: " + numColored); 

(setDrawingCache (뷰가 생성 될 때이 된 onDraw에서 호출하는 경우, getDrawingCache는 null를 돌려줍니다 때문에 사실이)라고합니다.)

으로 볼 수있다, 난 비트 맵을 가로 지르고 배열에서 값을 얻음으로써 검정 픽셀 수를 계산합니다. 그리고 제가 말했던 것처럼, 처음에 예상했던 수를 얻었지만, 그 후에는 증가 할 것으로 예상되었지만, 전혀 바뀌지 않는다!

누구에게 잘못된 생각이 있습니까? 감사합니다. .

답변

2

해결했습니다. 문제는 onDraw의 캔버스에서 마지막으로 그리기 작업 전에 setDrawingCacheEnabled (true)를 호출한다는 것입니다. 그리기를 마친 후에는 반드시 호출해야합니다. 그렇지 않으면 올바른 결과를 얻을 수 없습니다.

-1

그냥 명확히하기 위해 여기서 문제는 getDrawingCache()을 두 번째로 호출하기 전에보기의 드로잉 캐시가 무효화되지 않았다는 것입니다. 도면 캐시 위해서는

는 무효화해야 리프레쉬하고 같이 있어야하는 방법에 대한 호출의 순서는 다음과 같습니다 : 그것은 당신의 비트 맵을 재활용하기 때문에

public Bitmap renderView(View view) { 
    view.setDrawingCacheEnabled(true) 
    Bitmap bitmap = view.getDrawingCache(); 
    view.setDrawingCacheEnabled(false) 
    return bitmap; 
} 
+0

이 작동하지 않습니다. – janex

관련 문제