自定义circle

简介: 写了一个还不错的自定义控件,用来展示完成度或能力值,程序中配置好所占百分比,图中就可以用外面的圆环来显示百分比,效果还是不错的~代码实现如下:package com.xys.fastword.


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



代码实现如下:

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();
	}
}

以上。

目录
相关文章
|
JavaScript
background-color设置为透明的方法
background-color设置为透明的方法
170 0
定义一个类Rectangle,描述一个矩形,包含有长、宽两种属性(用length和width表示)和计算面积的方法(方面名定义为area)。
定义一个类Rectangle,描述一个矩形,包含有长、宽两种属性(用length和width表示)和计算面积的方法(方面名定义为area)。
840 0
|
计算机视觉 Python Windows
OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数。
338 0
OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
|
编译器 程序员 数据安全/隐私保护
C++ 类的定义和实现 class Color_and_Coordinate
C++ 类的定义和实现 class Color_and_Coordinate
116 0
编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle
编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle
|
Web App开发 前端开发 开发者
1 分钟认识新属性 accent-color —— 修改 input 默认控件颜色
1 分钟认识新属性 accent-color —— 修改 input 默认控件颜色
|
Web App开发 前端开发
给Img标签设置height和width属性
给Img标签设置height和width属性
722 0
|
容器
Center 中的 widthFactor 与 heightFactor 属性
Center 中的 widthFactor 与 heightFactor 属性
204 0
Center 中的 widthFactor 与 heightFactor 属性
|
Android开发 数据格式 XML
深入理解Android 自定义attr Style styleable以及其应用
相信每一位从事Android开发的猿都遇到过需要自己去自定义View的需求,如果想通过xml指定一些我们自己需要的参数,就需要自己声明一个styleable,并在里面自己定义一些attr属性,这个过程相信大家都比较了解。当然,属性其实也不一定需要和View配合使用,比如我想通过一个Theme中的style对一个库进行一些简单参数的配置,这应该怎么做呢?我今天在封装一个库时
2297 0
|
数据采集 前端开发 JavaScript