Author: YugeCse
Date: 2014.06.12

psb (1).jpg
package com.kaiju.kaiju.usercontrols;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.Paint.FontMetrics;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;public class CircleProgressBar extends View {    private Context context;    private Paint paint;    private float radius = 40f;    private float ringRadius = 10f;    private int progress = 0;    private int max = 100;    private int circleColor = Color.GRAY;    private int progressColor = Color.parseColor("#feb239");        public CircleProgressBar(Context context){        super(context);        init();    }        public CircleProgressBar(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }        public void init(){        paint = new Paint();        paint.setAntiAlias(true);    }            //设置默认圆环颜色    public void setCircleColor(int color){        this.circleColor = color;        this.invalidate();    }        public int getCircleColor(){        return this.circleColor;    }            //设置进度条颜色    public void setProgressColor(int color){        this.progressColor = color;        this.invalidate();    }        public int getProgressColor(){        return this.progressColor;    }           //设置圆环半径    public void setRingRadius(float radius){        this.ringRadius = radius;        this.invalidate();    }        public float getRingRadius(){        return this.ringRadius;    }        public void setRadius(float radius){        this.radius = radius;        this.invalidate();    }        public float getRadius(){        return this.radius;    }            //设置最大值    public void setMax(int value){        this.max = value;    }        public int getMax(){        return this.max;    }            //设置当前进度值    public void setProgress(int progress){        this.progress = progress;        this.invalidate();    }        public int getProgress(){        return this.progress;    }    @SuppressLint("DrawAllocation")    @Override    protected void onDraw(Canvas canvas) {                //获取控件测量的宽度高度        int width = getMeasuredWidth();        int height = getMeasuredHeight();        super.onDraw(canvas);               //设置画笔参数        paint.setAntiAlias(true);        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(10f);        paint.setColor(circleColor);                //绘制最大圆        canvas.drawArc(new RectF((width-radius*2)/2+2,(height-radius*2)/2,radius*2,radius*2), 270, 360, false, paint);        paint.setColor(progressColor);                //绘制内圆        canvas.drawArc(new RectF((width-radius*2)/2+2,(height-radius*2)/2,radius*2,radius*2), 270, (float)progress/max*360, false, paint);        paint.setColor(Color.BLUE);        String value = (int)(((float)progress/max)*100)+"%";        float widthText = 0f;        float[] widths = new float[value.length()];        for(int i=0;i

掌握这方面的自定义控件,主要的就是掌握Canvas的绘图函数,已经如何通过使用变量来控制绘图。这种进度条的绘制应该也算是最基本的了吧,哈哈。

更多相关文章

  1. android 自带的日期控件 DatePicker
  2. 安卓自定义简单loading
  3. java.lang.NoClassDefFoundError: com.jayway.android.robotium.
  4. Android使用摄像头拍照
  5. EditText样式设置
  6. 错误~~悲剧
  7. android TextView加载html内容并加载图片
  8. 设置ImageView圆角及边框问题
  9. Android(安卓)TextView丰富多彩的字体样式代码

随机推荐

  1. Android(安卓)开发环境的搭建 个人笔记
  2. Android(安卓)TextInputLayout 使用及其
  3. 【android】 监听去电和来电电话状态
  4. Android下intent的setdata、settype和set
  5. Android中ImageButton自定义按钮的按下效
  6. 朝花夕拾----新组件的学习和使用
  7. Android(安卓)零碎
  8. android.intent.action.MAIN 与 android.
  9. Android-Jni线程(一)— 创建线程
  10. Android获取所在地城市名