2014-04-02 41 views
0

我是Android開發人員和Canvas繪圖的新手。 當我在畫布上繪製東西時,我更容易在width = height = 1的矩形部分上工作。縮放後無法繪製弧度

我試圖按比例縮放,但是當試圖繪製弧度時,它很糟糕。 你能告訴我我做錯了什麼嗎?

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

好吧,我沒有找到解決方案,但我找到了解決辦法。 我創建了一個背景位圖,並將其用於繪製圖形的本地畫布。畢竟繪圖後,我再次將位圖繪製到畫布中。 我知道它不是優雅的,但那是我找到的解決方案

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(); 

    }