Android自定義帶加載動畫效果的環(huán)狀進度條
最近閑來無事,自定義了一個環(huán)狀進度條,話不多說直接上代碼 :
public class CircleProgressView extends View{
private Paint mCirPaint;
private Paint mArcPaint;
private Paint mTextPaint;
private float radius=200;
private int textsize=60;
private int progress=68;
private int stokeWidth=10;
private int circleColor=Color.GRAY;
private int arcColor=Color.GREEN;
private int textColor=Color.BLACK;
private int speed=0;
public CircleProgressView(Context context) {
super(context);
}
public CircleProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CircleProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setRadius(float radius){
this.radius=radius;
invalidate();
}
public void setTextSize(int textsize){
this.textsize=textsize;
invalidate();
}
public void setProgress(int progress){
this.progress=progress;
}
public void setStokewidth(int stokeWidth){
this.stokeWidth=stokeWidth;
invalidate();
}
public void setColor(int circleColor,int arcColor,int textColor){
this.circleColor=circleColor;
this.arcColor=arcColor;
this.textColor=textColor;
invalidate();
}
public void setSpeed(int speed){
this.speed=speed;
}
private void init() {
mCirPaint=new Paint();
mCirPaint.setColor(circleColor);
mCirPaint.setAntiAlias(true);
mCirPaint.setStyle(Paint.Style.STROKE);
mCirPaint.setStrokeWidth(stokeWidth);
mArcPaint=new Paint();
mArcPaint.setColor(arcColor);
mArcPaint.setAntiAlias(true);
mArcPaint.setStyle(Paint.Style.STROKE);
mArcPaint.setStrokeWidth(stokeWidth);
mTextPaint=new Paint();
mTextPaint.setColor(textColor);
mTextPaint.setTextSize(textsize);
mTextPaint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
init();
float centerX=getWidth()/2;
float centerY=getHeight()/2;
canvas.drawCircle(centerX,centerY,radius,mCirPaint);
canvas.drawArc(centerX-radius,centerY-radius,centerX+radius,centerY+radius,-90,progress*360/100,false,mArcPaint);
canvas.drawText(progress+"%",centerX-(mTextPaint.measureText(progress+"%"))/2,centerY+textsize/2,mTextPaint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (speed!=0){
startProgress();
}
}
public void startProgress(){
final int preProgress=progress;
new CountDownTimer(preProgress * speed, speed) {
@Override
public void onTick(long l) {
setProgress(preProgress-(int) (l/speed));
invalidate();
}
@Override
public void onFinish() {
setProgress(preProgress);
invalidate();
this.cancel();
}
}.start();
}
}
相關用法:
setProgress(progress);//設置進度
setRadius(300);//設置半徑
setStokewidth(60);//設置環(huán)寬
setTextSize(80);//設置文字進度大小
setColor(Color.GRAY,Color.RED,Color.BLUE);//設置顏色(環(huán)的顏色,進度條的顏色,文字進度的字體顏色)
setSpeed(20);//設置動畫速度,這里的數(shù)值是每次進度加一所用時間,所以數(shù)值越小動畫速度越快
測試代碼:
mCircleProgressView= (CircleProgressView) findViewById(R.id.circle_progress);
mCircleProgressView.setProgress(progress);
mCircleProgressView.setRadius(300);
mCircleProgressView.setStokewidth(60);
mCircleProgressView.setTextSize(80);
mCircleProgressView.setColor(Color.GRAY,Color.RED,Color.BLUE);
mCircleProgressView.setSpeed(20);
測試效果

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android中WebView加載網(wǎng)頁設置進度條
- Android Webview添加網(wǎng)頁加載進度條實例詳解
- Android 進度條 ProgressBar的實現(xiàn)代碼(隱藏、出現(xiàn)、加載進度)
- Android自定義View仿華為圓形加載進度條
- Android自定義View實現(xiàn)加載進度條效果
- Android開發(fā)之ProgressBar字體隨著進度條的加載而滾動
- Android自定義View基礎開發(fā)之圖片加載進度條
- Android中WebView加載網(wǎng)頁設置進度條
- Android自定義帶進度條WebView仿微信加載過程
- Android自定義View實現(xiàn)圓形加載進度條
相關文章
Android中使用PagerSlidingTabStrip實現(xiàn)導航標題的示例
本篇文章主要介紹了Android中使用PagerSlidingTabStrip實現(xiàn)導航標題的示例,具有一定的參考價值,有興趣的可以了解一下。2017-01-01
Android Studio 報Integer types not allowed錯誤
本文給大家分享的是在使用Android Studio的過程中遇到的報Integer types not allowed錯誤的分析及解決方法,非常實用,有需要的小伙伴可以參考下2017-10-10
Android穩(wěn)定性:可遠程配置化的Looper兜底框架
這篇文章主要為大家介紹了Android穩(wěn)定性可遠程配置化的Looper兜底框架實例實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

