最近项目中使用到了渐变效果的圆形进度条,网上找了很多渐变效果不够圆滑,两个渐变颜色之间有明显的过渡,或者有些代码画出来的效果过渡不美观,于是自己参照写了一个,喜欢的朋友可以参考或者直接使用。
先上一张效果图,视频录制不太好,不过不影响效果
下面开始介绍实现代码,比较简单,直接贴代码吧
1、声明自定义属性
在项目的valuse文件夹下新建attrs.xml,在里面定义自定义控件需要的属性
<declare-styleable name="RoundProgress">
<attr name="bgColor" format="color" />
<attr name="roundWidth" format="dimension" />
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
<attr name="maxProgress" format="integer" />
<attr name="textIsDisplayable" format="boolean" />
<attr name="lineColor" format="color" />
</declare-styleable>
2、自定义一个进度条RoundProgres继承view类
package com.blankj.progressring;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.SweepGradient;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.LinearInterpolator;
import org.jetbrains.annotations.Nullable;
/**
* 类描述:渐变的圆形进度条
*
* @author:lusy
* @date :2018/10/17
*/
public class RoundProgress extends View {
private static final String TAG = "roundProgress";
/**
* 背景圆环画笔
*/
private Paint bgPaint;
/**
* 白色标记画笔
*/
private Paint iconPaint;
/**
* 进度画笔
*/
private Paint progressPaint;
/**
* 进度文本画笔
*/
private Paint textPaint;
/**
* 背景圆环的颜色
*/
private int bgColor;
/**
* 线条进度的颜色
*/
private int iconColor;
private int[] progressColor;
/**
* 中间进度百分比的字符串的颜色
*/
private int textColor;
/**
* 中间进度百分比的字符串的字体大小
*/
private float textSize;
/**
* 圆环的宽度
*/
private float roundWidth;
/**
* 最大进度
*/
private int max;
/**
* 当前进度
*/
private float progress;
/**
* 是否显示中间的进度
*/
private boolean textIsDisplayable;
/**
* 圆环半径
*/
private int mRadius;
private int center;
private float startAngle = -90;
pri