栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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; 
 
 
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 mTotalProgress = 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, 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, 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 / mTotalProgress) * 360, false, mRingPaint); // 
//     canvas.drawCircle(mXCenter, mYCenter, mRadius + mStrokeWidth / 2, mRingPaint); 
     String txt = mProgress + "%"; 
     mTxtWidth = mTextPaint.measureText(txt, 0, txt.length()); 
     canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint); 
 } 
    } 
     
    public void setProgress(int progress) { 
 mProgress = progress; 
// invalidate(); 
 postInvalidate(); 
    } 
 
} 

attrs.xml

 
 
   
   
     
     
     
     
   
   
 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/160179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号