???????????
???????????????У??????????????Android?????????е????????????http://www.cnblogs.com/jerehedu/p/4360066.html
?????????????У???????????????????????????дondraw????????????????????????ν???????Ч??????????
 

??????????????
????1????д????????MyCircleProgress???View
????public class MyCircleProgress extends View{
????…
????}
????2????MyCircleProgress???У?????????
????public int progress=0;//?????????????????
????/**
????*????????????????????????ν????????С????????????
????*/
????private int mR;//????????????С
????private int bgColor;//???????????
????private int fgColor;//?????????????????????????
????private int drawStyle;//????????FILL????ν???????STROKE??????ν?????
????private int strokeWidth;//STROKE??????ε???????
????private int max;//????????y??????
????/**
????*???y??????????????????????????????????????
????*/
????public synchronized void setProgress(int progress){
????if(progress<0){
????progress=0;
????}else if(progress>max){
????progress=max;
????}else{
????this.progress=progress;
????}  
????}
????public int getMax(){
????return max; }
????3?????????????дattrs.xml?????????????????res/values???£????????£?
????<?xml version="1.0"encoding="utf-8"?>
????<resources>
????<declare-styleable name="CircleProgressBar">
????<attr name="bgColor"format="color"/>
????<attr name="fgColor"format="color"/>
????<attr name="r"format="integer"/>
????<attr name="strokeWidth"format="integer"/>
????<attr name="drawStyle">
????<enum name="STROKE"value="0"></enum>
????<enum name="FILL"value="1"></enum>
????</attr>
????<attr name="max"format="integer"/>
????</declare-styleable>
????</resources>
????4????MyCircleProgress???ж??幹???????????????
????private void initProperty(AttributeSet attrs){
????TypedArray tArray=context.obtainStyledAttributes(attrs??R.styleable.CircleProgressBar);
????mR=tArray.getInteger(R.styleable.CircleProgressBar_r??10);
????bgColor=tArray.getColor(R.styleable.CircleProgressBar_bgColor??Color.GRAY);
????fgColor=tArray.getColor(R.styleable.CircleProgressBar_fgColor??Color.RED);
????drawStyle=tArray.getInt(R.styleable.CircleProgressBar_drawStyle??0);
????strokeWidth=tArray.getInteger(R.styleable.CircleProgressBar_strokeWidth??10);
????max=tArray.getInteger(R.styleable.CircleProgressBar_max??100);
????} 
????public MyCircleProgress(Context context??AttributeSet attrs){
????super(context??attrs);
????this.context=context;
????this.paint=new Paint();
????this.paint.setAntiAlias(true);//???????
????this.paint.setStyle(Style.STROKE);//????????????????
????initProperty(attrs); 
????}
????5????MainActivity?в???????????MyCircleProgress????????????
????<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
????xmlns:tools="http://schemas.android.com/tools"
????xmlns:app="http://schemas.android.com/apk/res/com.jereh.mydrawcircleprogress"
????android:layout_width="match_parent"
????android:layout_height="match_parent"
????android:paddingBottom="@dimen/activity_vertical_margin"
????android:paddingLeft="@dimen/activity_horizontal_margin"
????android:paddingRight="@dimen/activity_horizontal_margin"
????android:paddingTop="@dimen/activity_vertical_margin"
????tools:context=".MainActivity"
????>
????<com.jereh.views.MyCircleProgress
????android:id="@+id/MyCircleProgress"
????android:layout_width="wrap_content"
????android:layout_height="wrap_content"
????app:r="45"
????app:strokeWidth="10"
????app:bgColor="#cccccc"
????app:fgColor="#ff0000"
????app:drawStyle="FILL"
????app:max="50"
????/>
????</RelativeLayout>
????6??????????MyCircleProgress????дonDraw??????
????protected void onDraw(Canvas canvas){
????super.onDraw(canvas);
????int center=getWidth()/2;//???λ??
????this.paint.setColor(bgColor);
????this.paint.setStrokeWidth(strokeWidth);
????canvas.drawCircle(center??center??mR??this.paint);
????//???????
????this.paint.setColor(fgColor);
????if(drawStyle==0){
????this.paint.setStyle(Style.STROKE);
????opt=false;
????}else{
????this.paint.setStyle(Style.FILL);
????opt=true;
????}
????int top=(center-mR);
????int bottom=(center+mR);
????RectF oval=new RectF(top??top??bottom??bottom);
????canvas.drawArc(oval??270??360*progress/max??opt??paint);
????}
????7????дMainActivity
????public class MainActivity extends Activity{
????private MyCircleProgress progressView;
????@Override
????protected void onCreate(Bundle savedInstanceState){
????super.onCreate(savedInstanceState);
????setContentView(R.layout.activity_main);
????progressView=(MyCircleProgress)findViewById(R.id.MyCircleProgress);
????new ProgressAnimation().execute();
????}
????class ProgressAnimation extends AsyncTask<Void??Integer??Void>{
????@Override
????protected Void doInBackground(Void...params){
????//??????????仯
????for(int i=0;i<progressView.getMax();i++){
????try{
????publishProgress(i);
????Thread.sleep(100);
????}catch(InterruptedException e){
????e.printStackTrace();
????}
????}
????return null;
????}
????@Override
????protected void onProgressUpdate(Integer...values){
????//????????
????progressView.setProgress(values[0]);
????progressView.invalidate();
????super.onProgressUpdate(values);
????}
????}
????}