这次在网上直接找了别人现成的轮子来用
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.graphics.Typeface;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
import android.support.annotation.Nullable;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;
public class CircleProgressView extends View {
private Context context;
/**
* 画笔
*/
private Paint mPaint;
/**
* 文本画笔
*/
private TextPaint mTextPaint;
/**
* 笔画描边的宽度
*/
private float mStrokeWidth;
/**
* 开始角度(默认从12点钟方向开始)
*/
private int mStartAngle = 270;
/**
* 扫描角度(一个圆)
*/
private int mSweepAngle = 360;
/**
* 圆心坐标x
*/
private float mCircleCenterX;
/**
* 圆心坐标y
*/
private float mCircleCenterY;
/**
* 圆正常颜色
*/
private int mNormalColor = 0xFFC8C8C8;
/**
* 进度颜色
*/
private int mProgressColor = 0xFF4FEAAC;
/**
* 是否使用着色器
*/
private boolean isShader = true;
/**
* 着色器
*/
private Shader mShader;
/**
* 着色器颜色
*/
private int[] mShaderColors = new int[]{0xFF4FEAAC, 0xFFA8DD51, 0xFFE8D30F, 0xFFA8DD51, 0xFF4FEAAC};
/**
* 半径
*/
private float mRadius;
/**
* 内圆与外圆的间距
*/
private float mCirclePadding;
/**
* 刻度间隔的角度大小
*/
private float mTickSplitAngle = 5;
/**
* 刻度的角度大小
*/
private float mBlockAngle = 1;
/**
* 总刻度数
*/
private int mTotalTickCount;
/**
* 最大进度
*/
private int mMax = Integer.MAX_VALUE;
/**
* 当前进度
*/
private int mProgress = 0;
/**
* 动画持续的时间
*/
private int mDuration = 500;
/**
* 标签内容
*/
private String mLabelText;
/**
* 字体大小
*/
private float mLabelTextSize;
/**
* 字体颜色
*/
private int mLabelTextColor = 0xFF333333;
/**
* 进度百分比
*/
private float mProgressPercent;
private String mTextProgressPercent;
/**
* 是否显示标签文字
*/
private boolean isShowLabel = true;
/**
* 是否默认显示百分比为标签文字
*/
private boolean isShowPercentText = true;
/**
* 是否显示外边框刻度
*/
private boolean isShowTick = true;
/**
* 是否旋转
*/
private boolean isTurn = false;
private OnChangeListener mOnChangeListener;
public CircleProgressView(Context context) {
this(context, null);
}
public CircleProgressView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public CircleProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
/**
* 初始化
*
* @param context
* @param attrs
*/
private void init(Context context, AttributeSet attrs) {
this.context = context;
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressView);
DisplayMetrics displayMetrics = getDisplayMetrics();
mStrokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 6, displayMetrics);
mLabelTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, displayMetrics);
mCirclePadding = TypedValue.applyDimension(TypedValue.CO