문제

나는 애니메이션을 그리려고 노력하고 있습니다. 그렇게하기 위해 ondraw () 메소드를 확장하고 재정의했습니다. 내가 기대할 것은 ondraw ()가 캔버스라고 불리는 시간마다 내가 그것을 떠난 상태에있을 것이며 그것을 지우거나 그 일부를 그릴 수 있도록 선택할 수 있다는 것입니다. ) 그러나 캔버스가 다시 돌아올 때마다 이미 지워졌습니다. 내가 그것을 지울 수없는 방법이 있습니까? 아니면 이전 상태를 비트 맵에 저장하여 비트 맵을 그려서 그 위에 그 위로 끌 수 있습니까?

도움이 되었습니까?

해결책

방법이 있는지 확실하지 않습니다. 그러나 내 사용자 정의보기의 경우 ondraw ()가 호출 될 때마다 모든 것을 다시 그리거나 비트 맵으로 그리고 캔버스에 비트 맵을 그립니다 (질문에서 제안한 것처럼).

내가하는 방법은 다음과 같습니다

class A extends View {

    private Canvas canvas;
    private Bitmap bitmap;

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (bitmap != null) {
            bitmap .recycle();
        }
        canvas= new Canvas();
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas.setBitmap(bitmap);
    }
    public void destroy() {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
    public void onDraw(Canvas c) {
      //draw onto the canvas if needed (maybe only the parts of animation that changed)
      canvas.drawRect(0,0,10,10,paint);

      //draw the bitmap to the real canvas c
      c.drawBitmap(bitmap, 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
    }
}

다른 팁

당신은 살펴 봐야합니다 여기 기본보기와 SurfaceView의 차이점을 확인합니다. SurfaceView에는 드로잉 전용 레이어가있어 이전에 그린 것을 추적한다고 생각합니다. 이제 기본보기에서 정말로하고 싶다면 예보와 같은 각 항목을 배열에 넣을 수 있습니다. MapView의 항목 별 오버레이. 거의 같은 방식으로 작동해야합니다

당신의 기대는 현실과 관련이 없습니다 :) 캔버스는 당신이 떠난 방식이 아니지만 대신 비워집니다. 그릴 객체의 배열 목록 (canvas.drawcircle (), canvas.drawbitmap () 등을 만들 수 있습니다. 그래픽 프로그래밍을 처음 접했지만 이것을 소규모로 사용했습니다. 아마도 훨씬 더 좋은 방법이있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top