自定义circle

写了一个还不错的自定义控件,用来展示完成度或能力值,程序中配置好所占百分比,图中就可以用外面的圆环来显示百分比,效果还是不错的~



代码实现如下:

package com.xys.fastword.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class CircleProgress extends View {

	private int measureHeigth;
	private int measureWidth;

	private Paint mCirclePaint;
	private float mCircleXY;
	private float mRadius;

	private Paint marcPaint;
	private RectF marcRectF;
	private float mSweepAngle;
	private float mSweepValue;

	private Paint mTextPaint;
	private String mshowtext;
	private float mshowtextSize;

	public CircleProgress(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
	}

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

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

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		measureWidth = MeasureSpec.getSize(widthMeasureSpec);
		measureHeigth = MeasureSpec.getSize(heightMeasureSpec);
		setMeasuredDimension(measureWidth, measureHeigth);
		initView();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
		canvas.drawArc(marcRectF, 270, mSweepAngle, false, marcPaint);
		canvas.drawText(mshowtext, 0, mshowtext.length(), mCircleXY, mCircleXY
				+ (mshowtextSize / 4), mTextPaint);
		canvas.restore();
	}

	private void initView() {
		float length = 0;
		if (measureHeigth >= measureWidth) {
			length = measureWidth;
		} else {
			length = measureHeigth;
		}

		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 20;
	}

	private String setshowtext() {
		this.invalidate();
		return "ssssss";
	}

	public void forceInvalidate() {
		this.invalidate();
	}

	public void setSweepValue(float sweepValue) {
		mSweepValue = sweepValue;
		this.invalidate();
	}
}

以上。

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...