Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android自定义漂亮的圆形进度条大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

这几天对Android中实现画圆弧及圆弧效果中所实现的效果进行了修改,改为进度圆心进度条,效果如图所示

Android自定义漂亮的圆形进度条

TasksCompletedView.java 代码如下

import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.RectF; 
import android.graphics.Paint.FontMetrics; 
import android.util.AttributeSet; 
import android.view.View; 
 
import com.snailws.taskscompleted.R; 
 
/** 
* @author naiyu(http://snailws.com) 
* @version 1.0 
*/ 
public class TasksCompletedView extends View { 
 
    // 画实心圆的画笔 
    private Paint mCirclePaint; 
    // 画圆环的画笔 
    private Paint mRingPaint; 
    // 画字体的画笔 
    private Paint mTextPaint; 
    // 圆形颜色 
    privatE int mCircleColor; 
    // 圆环颜色 
    privatE int mRingColor; 
    // 半径 
    private float mRadius; 
    // 圆环半径 
    private float mRingRadius; 
    // 圆环宽度 
    private float mstrokeWidth; 
    // 圆心x坐标 
    privatE int mXCenter; 
    // 圆心y坐标 
    privatE int mYCenter; 
    // 字的长度 
    private float mTxtWidth; 
    // 字的高度 
    private float mTxtHeight; 
    // 总进度 
    privatE int m@R_914_10586@lProgress = 100; 
    // 当前进度 
    privatE int mProgress; 
 
    public TasksCompletedView(Context context,AttributeSet attrs) { 
        super(context,attrs); 
        // 获取自定义属性 
        initAttrs(context,attrs); 
        initVariable(); 
    } 
 
    private void initAttrs(Context context,AttributeSet attrs) { 
        TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,R.styleable.TasksCompletedView,0); 
        mRadius = typeArray.getDimension(R.styleable.TasksCompletedView_radius,80); 
        mstrokeWidth = typeArray.getDimension(R.styleable.TasksCompletedView_strokeWidth,10); 
        mCircleColor = typeArray.getColor(R.styleable.TasksCompletedView_circleColor,0xFFFFFFFF); 
        mRingColor = typeArray.getColor(R.styleable.TasksCompletedView_ringColor,0xFFFFFFFF); 
         
        mRingRadius = mRadius + mstrokeWidth / 2; 
    } 
 
    private void initVariable() { 
        mCirclePaint = new Paint(); 
        mCirclePaint.setAntiAlias(true); 
        mCirclePaint.setColor(mCircleColor); 
        mCirclePaint.setStyle(Paint.Style.FILL); 
         
        mRingPaint = new Paint(); 
        mRingPaint.setAntiAlias(true); 
        mRingPaint.setColor(mRingColor); 
        mRingPaint.setStyle(Paint.Style.stroke); 
        mRingPaint.setstrokeWidth(mstrokeWidth); 
         
        mTextPaint = new Paint(); 
        mTextPaint.setAntiAlias(true); 
        mTextPaint.setStyle(Paint.Style.FILL); 
        mTextPaint.setARGB(255,255,255); 
        mTextPaint.setTextSize(mRadius / 2); 
         
        FontMetrics fm = mTextPaint.getFontMetrics(); 
        mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent); 
         
    } 
 
    @Override 
    protected void onDraw(Canvas canvas) { 
 
        mXCenter = getWidth() / 2; 
        mYCenter = getHeight() / 2; 
         
        canvas.drawCircle(mXCenter,mYCenter,mRadius,mCirclePaint); 
         
        if (mProgress > 0 ) { 
            RectF oval = new RectF(); 
            oval.left = (mXCenter - mRingRadius); 
            oval.top = (mYCenter - mRingRadius); 
            oval.right = mRingRadius * 2 + (mXCenter - mRingRadius); 
            oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius); 
            canvas.drawArc(oval,-90,((float)mProgress / m@R_914_10586@lProgress) * 360,false,mRingPaint); // 
//            canvas.drawCircle(mXCenter,mRadius + mstrokeWidth / 2,mRingPaint); 
            String txt = mProgress + "%"; 
            mTxtWidth = mTextPaint.measureText(txt,txt.length()); 
            canvas.drawText(txt,mXCenter - mTxtWidth / 2,mYCenter + mTxtHeight / 4,mTextPaint); 
        } 
    } 
     
    public void setProgress(int progress) { 
        mProgress = progress; 
//        invalidate(); 
        posTinvalidate(); 
    } 
 
} 

attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<@R_874_5550@es> 
   
  <declare-styleable name="TasksCompletedView"> 
    <attr name="radius" format="dimension"/> 
    <attr name="strokeWidth" format="dimension"/> 
    <attr name="circleColor" format="color"/> 
    <attr name="ringColor" format="color"/> 
  </declare-styleable> 
   
</@R_874_5550@es> 

源码下载:http://xiazai.code.net/201701/yuanma/AndroidCompleted(code.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

大佬总结

以上是大佬教程为你收集整理的Android自定义漂亮的圆形进度条全部内容,希望文章能够帮你解决Android自定义漂亮的圆形进度条所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:进度条