2014-04-02 2 views
0

안드로이드 개발 및 Canvas 드로잉에 초보자입니다. 캔버스에 물건을 그릴 때 width = height = 1의 직사각형 부분에서 작업하기가 더 쉽습니다.크기 조정 후 drawArc를 사용할 수 없습니다.

나는 크기에 따라 노력하지만 drawArc를 그리려하면 그다지 그리지 않습니다. 내가 뭘 잘못하고 있는지 말해 줄 수 있니?

public class MyChart extends View{ 
    private RectF dimentionRect; 
    private Paint dimentionPaint; 
    private static final String TAG = "VERBOSE"; 
    public MyChart(Context context){ 
     super(context); 
     initDrawingTools(); 
    } 
    public MyChart(Context context,AttributeSet attrs) { 
     super(context,attrs); 
     initDrawingTools(); 
    } 

    private void initDrawingTools(){ 
     dimentionPaint = new Paint(); 
     dimentionPaint.setColor(Color.GREEN); 
     dimentionPaint.setStyle(Style.FILL); 
    } 
    @Override 
    protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec){ 
     int widthSize = MeasureSpec.getSize(widthMeasureSpec); 
     int heightSize = MeasureSpec.getSize(heightMeasureSpec); 
     int chosenDimention = Math.min(widthSize, heightSize); 
     setMeasuredDimension(chosenDimention, chosenDimention); 
     Log.v(TAG, "onMeasure: "+chosenDimention); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     Log.v(TAG, "onSizeChange"); 
    } 

    @Override 
    public void onDraw(Canvas canvas){ 
     float width = (float)getWidth(); 
     Log.v(TAG, "onDraw: "+width); 

     canvas.save(Canvas.MATRIX_SAVE_FLAG); 
     canvas.scale(width, width); 

     dimentionRect = new RectF(0,0,1f,1f); 
     //canvas.drawRect(dimentionRect, dimentionPaint); // 
     canvas.drawArc(dimentionRect, 0, 180, true, dimentionPaint); 
    // canvas.drawCircle(0.5f, 0.5f, 0.3f, dimentionPaint); 
     canvas.restore(); 

    } 

} 

답변

0

좋아, 해결책을 찾지 못했지만 해결 방법을 찾을 수있었습니다. 배경 비트 맵을 작성하여 드로잉 작업을 수행하는 로컬 Canvas에 사용했습니다. 모든 그림을 마친 후에 다시 비트 맵을 캔버스에 그립니다. 나는 우아하지 않다는 것을 알았지 만, 내가 아는 해결책은 이것이다.

private void drawBackground(Canvas canvas){ 
     if(background != null){ 
      canvas.drawBitmap(background, 0,0,backgroundPaint); 
      Log.e(TAG, "Drawing background"); 
     } 
    } 

    private void regenerateBackground(){ 
     if(background != null){ 
      background.recycle(); 
     } 
     background = Bitmap.createBitmap(getWidth(), getWidth(), Config.ARGB_8888); 
     RectF rect = new RectF(0,0,getWidth(),getWidth()); 
     Canvas c = new Canvas(background); 
     c.drawRect(rect, backgroundPaint); 

    } 
    @Override 
    protected void onDraw(Canvas canvas){ 
     drawBackground(canvas); 

     float width = (float)getWidth(); 
     Canvas c = new Canvas(background); 

     c.save(Canvas.MATRIX_SAVE_FLAG); 
     c.scale(width,width); 
     border = new RectF(0,0,1,1); 
//  
     Paint p = new Paint(); 
     p.setColor(Color.GREEN); 
     p.setStyle(Style.FILL); 
     c.drawArc(border, 0, 360,true, p); 
     c.restore(); 

    } 
관련 문제