常见app欢迎页圆形进度条倒计时功能,可设置显示文字,进度条颜色,宽度,倒计时时间,内圆颜色、设置进度条类型 顺数进度条(0-100)还是倒数进度条(100-0);
先上效果图:
下面介绍实现逻辑:
自定义CircleProgressbar继承TextView,在onDraw()方法里获取view边界,先画一个内部实心圆,然后画一个圆边框,然后接着在圆的中心位置画字(你要显示的字 跳转),然接开始画我们最需要的进度条了。现在画完了,那么如何显示进度条呢,我们通过Runnable 每隔 (倒计时时间秒 / 100)获取进度progress大小,通过invalidate()刷新幕实现圆形倒计时;
附上自定义view代码:public class CircleProgressbar extends TextView {
//外部轮廓的颜色
private int outLineColor = Color.BLACK;
//外部轮廓的宽度
private int outLineWidth = 2;
//内部圆的颜色
private ColorStateList inCircleColors = ColorStateList.valueOf(Color.TRANSPARENT);
//中心圆的颜色
private int circleColor;
//进度条的颜色
private int progressLineColor = Color.BLUE;
//进度条的宽度
private int progressLineWidth = 8;
//画笔
private Paint mPaint = new Paint();
//进度条的矩形区域
private RectF mArcRect = new RectF();
//进度
private int progress = 100;
//进度条类型
private ProgressType mProgressType = ProgressType.COUNT_BACK;
//进度倒计时时间
private long timeMillis = 3000;
//View的显示区域。
final Rect bounds = new Rect();
//进度条通知。
private OnCountdownProgressListener mCountdownProgressListener;
private int listenerWhat = 0;
public CircleProgressbar(Context context) {
this(context, null);
}
public CircleProgressbar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CircleProgressbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initialize(context, attrs);
}
@Targe