自定义View继承view

来源:互联网 发布:安装联系人软件 编辑:程序博客网 时间:2024/05/17 09:39
public class CircleProgressView extends View {    private int mMeasureHeigth;    private int mMeasureWidth;    private Paint mCirclePaint;    private float mCircleXY;    private float mRadius;    private Paint mArcPaint;    private RectF mArcRectF;    private float mSweepAngle;    private float mSweepValue = 75;//默认比例是75%    private Paint mTextPaint;    private String mShowText;    private float mShowTextSize;    public CircleProgressView(Context context, AttributeSet attrs,                              int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    public CircleProgressView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public CircleProgressView(Context context) {        super(context);    }    @Override    protected void onMeasure(int widthMeasureSpec,                             int heightMeasureSpec) {        mMeasureWidth = MeasureSpec.getSize(widthMeasureSpec);        mMeasureHeigth = MeasureSpec.getSize(heightMeasureSpec);        setMeasuredDimension(mMeasureWidth, mMeasureHeigth);        initView();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);
        initView();        // 绘制圆        canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);        // 绘制弧线        canvas.drawArc(mArcRectF, 270, mSweepAngle, false, mArcPaint);        // 绘制文字        canvas.drawText(mShowText, 0, mShowText.length(),                mCircleXY, mCircleXY + (mShowTextSize / 4), mTextPaint);    }    private void initView() {        float length = 0;        if (mMeasureHeigth >= mMeasureWidth) {            length = mMeasureWidth;        } else {            length = mMeasureHeigth;        }        mCircleXY = length / 2;        mRadius = (float) (length * 0.5 / 2);        mCirclePaint = new Paint();        mCirclePaint.setAntiAlias(true);        mCirclePaint.setColor(getResources().getColor(                android.R.color.holo_blue_bright));        mArcRectF = new RectF(                (float) (length * 0.1),                (float) (length * 0.1),                (float) (length * 0.9),                (float) (length * 0.9));        mSweepAngle = (mSweepValue / 100f) * 360f;        mArcPaint = new Paint();        mArcPaint.setAntiAlias(true);        mArcPaint.setColor(getResources().getColor(                android.R.color.holo_blue_bright));        mArcPaint.setStrokeWidth((float) (length * 0.1));        mArcPaint.setStyle(Style.STROKE);        mShowText = setShowText();        mShowTextSize = setShowTextSize();        mTextPaint = new Paint();        mTextPaint.setTextSize(mShowTextSize);        mTextPaint.setTextAlign(Paint.Align.CENTER);    }    private float setShowTextSize() {        this.invalidate();        return 50;    }    private String setShowText() {        this.invalidate();        return "Android Skill";    }    public void forceInvalidate() {        this.invalidate();    }    public void setSweepValue(float sweepValue) {                    mSweepValue = sweepValue;              this.invalidate();    }}

在xml中使用

<com.example.kongjian_1.CircleProgressView        android:layout_width="200dp"        android:layout_height="200dp" >    </com.example.kongjian_1.CircleProgressView>


0 0