2014-12-02 130 views
0

我需要畫一個空圈,邊距爲10像素。我遇到的問題是我需要在2秒內模擬圓的繪製,然後在另一個顏色的另一個上面開始繪製。我使用自定義視圖,並試圖將我的邏輯實現爲onDraw方法,並使視圖每隔50毫秒失效。問題是我無法設法畫出圓圈......我只繪製了人體的數字。有人知道我如何繪製一個圓圈,而不使用canvas.drawCircle方法,因爲該方法直接繪製圓圈而沒有動畫。在模擬動畫的畫布上畫圓圈android

我當前的代碼

public class CustomAnimationView extends View{ 

private Canvas canvas; 
private int count = 0; 
private Paint paint; 
private int mLeft; 
private int mRight; 
private int mBottom; 
private int mTop; 


public CustomAnimationView(Context context) { 
    super(context); 
} 

public CustomAnimationView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public CustomAnimationView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    setAttributes(attrs); 
} 

private void setAttributes(AttributeSet attrs) { 
} 

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    this.canvas = canvas; 

    if(paint == null){ 
     paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(10); 
     paint.setColor(Color.BLACK); 
    } 

    if(count<150){ 
      drawFirstQuarter(count); 
    } 

    count++; 
} 

public void drawFirstQuarter(int count){ 
    RectF oval = new RectF(mLeft, mTop, mRight, mBottom); 
    canvas.drawArc(oval, 90, 30, true, paint); 
} 


public void setRect(int top, int bottom, int left, int right){ 
    mBottom = bottom; 
    mTop = top; 
    mLeft = left; 
    mRight = right; 
} 

}

現在我只是特林畫有點圓的。

+0

您可以發佈您當前的自定義視圖的代碼? – petey 2014-12-02 15:16:28

回答

0

謝謝。我解決了它。 下面是一個代碼示例

public class CustomAnimationView extends View{ 

    private Canvas canvas; 
    private int mCount = 0; 
    private Paint paint1; 
    private Paint paint2; 
    private RectF oval1; 
    private Context context; 
    private int mColorCount = 0; 

    public CustomAnimationView(Context context) { 
     super(context); 
     this.context = context; 
    } 

    public CustomAnimationView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context = context; 
    } 

    public CustomAnimationView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     this.context = context; 
     setAttributes(attrs); 
    } 

    private void setAttributes(AttributeSet attrs) { 
    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     this.canvas = canvas; 

     if(paint1 == null){ 
      paint1 = new Paint(); 
      paint1.setAntiAlias(true); 
      paint1.setStyle(Style.STROKE); 
      paint1.setStrokeWidth(10); 
     } 

     if(paint2 == null){ 
      paint2 = new Paint(); 
      paint2.setAntiAlias(true); 
      paint2.setStyle(Style.STROKE); 
      paint2.setStrokeWidth(10); 
     } 


     if(mCount % 360 == 0){ 
      mColorCount++; 
     } 

     if(mColorCount % 2 == 0){ 
      paint1.setColor(context.getResources().getColor(R.color.white)); 
      paint2.setColor(context.getResources().getColor(R.color.black)); 
     }else{ 
      paint2.setColor(context.getResources().getColor(R.color.white)); 
      paint1.setColor(context.getResources().getColor(R.color.black)); 
     } 

     if(oval1 == null) 
      oval1 = new RectF(5,5,canvas.getWidth()-5, canvas.getHeight()-5); 

     drawFirstQuarter(mCount, oval1); 

    } 

    public void drawFirstQuarter(int count, RectF oval){ 
     canvas.drawArc(oval, 90, 360, false, paint2); 
     canvas.drawArc(oval, 90, count, false, paint1); 
     if(mCount == 330) 
      mCount = 0; 
     else 
      mCount += 30; 
    } 

}