源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/ProgressChart.zip

因项目需要,自己尝试定义了一个进度环,用于显示进度,实现效果如下:

主要代码如下:

public class ProgressChart extends View
{private Context context;//圆环背景画笔private Paint paintBg;//圆环进度画笔private Paint paintProgress;//文字画笔1private Paint paintText1;//文字画笔2private Paint paintText2;// 圆环的宽度 private float progressWidth;  //圆环的区域private RectF roundRect;//文字的区域private Rect textRect;//单个字符的区域private Rect charRect;//绘制时每次增加的度数private float rotateDegree = 1.0F;//绘制开始的度数private float startDegree = 0.0F;//结束的度数private float endDegree;//背景颜色private int bgColor;//进度颜色private int progressColor;// 中间进度百分比的字符串的颜色 private int textColor;  //字符串的文字大小private float text1Size;//字符串的文字大小private float text2Size;//绘制的字符串private String text="0%";public ProgressChart(Context context) {this(context, null);}public ProgressChart(Context context, AttributeSet attrs) {this(context, attrs, 0);}public ProgressChart(Context context, AttributeSet attrs,int defStyleAttr) {super(context, attrs, defStyleAttr);this.context=context;init(attrs);}private void init(AttributeSet attrs) {TypedArray mTypedArray = context.obtainStyledAttributes(attrs,R.styleable.ProgressChart);this.progressWidth = mTypedArray.getDimension(R.styleable.ProgressChart_progressWidth, 8);this.text1Size = mTypedArray.getDimension(R.styleable.ProgressChart_textSize1, 32);this.text2Size = mTypedArray.getDimension(R.styleable.ProgressChart_textSize2, 20);this.bgColor = mTypedArray.getColor(R.styleable.ProgressChart_bgColor,Color.parseColor("#fff2f2f2"));this.progressColor = mTypedArray.getColor(R.styleable.ProgressChart_progressColor,Color.parseColor("#fffd0000"));this.textColor = mTypedArray.getColor(R.styleable.ProgressChart_txtColor,Color.parseColor("#fffd0000"));mTypedArray.recycle();this.textRect = new Rect();this.charRect = new Rect();this.paintBg = new Paint();this.paintBg.setStyle(Paint.Style.STROKE);this.paintBg.setStrokeWidth(this.progressWidth);this.paintBg.setColor(this.bgColor);this.paintProgress = new Paint();this.paintProgress.setStyle(Paint.Style.STROKE);this.paintProgress.setStrokeWidth(this.progressWidth);this.paintProgress.setColor(this.progressColor);this.paintText1 = new Paint();this.paintText1.setTextSize(this.text1Size);this.paintText1.setTextAlign(Paint.Align.CENTER);this.paintText1.setColor(this.textColor);this.paintText2 = new Paint();this.paintText2.setTextSize(this.text2Size);this.paintText2.setTextAlign(Paint.Align.CENTER);this.paintText2.setColor(this.textColor);}public boolean setProgress(String progress){this.text = DecimalFormat.getPercentInstance().format(Double.valueOf(progress));this.startDegree = 0.0F;this.endDegree = (360.0F * Float.valueOf(progress).floatValue());this.rotateDegree = (this.endDegree / 40.0F);invalidate();return true;}@Overrideprotected void onDraw(Canvas canvas){//绘制圆环背景canvas.drawArc(this.roundRect, 0.0F, 360.0F, false, this.paintBg);//绘制进度if (this.startDegree < this.endDegree){canvas.drawArc(this.roundRect, -90.0F, this.startDegree, false, this.paintProgress);this.startDegree += this.rotateDegree;invalidate();}else{canvas.drawArc(this.roundRect, -90.0F, this.endDegree, false, this.paintProgress);}if(!TextUtils.isEmpty(this.text)){//绘制文字this.paintText1.getTextBounds(this.text, 0, this.text.length(), this.textRect);this.paintText2.getTextBounds("%", 0, 1, this.charRect);FontMetricsInt fontMetricsInt = this.paintText1.getFontMetricsInt();float y = this.roundRect.top + (this.roundRect.bottom - this.roundRect.top - fontMetricsInt.bottom + fontMetricsInt.top) / 2.0F - 5 * fontMetricsInt.top / 5;canvas.drawText(this.text.replace("%", ""), this.roundRect.centerX() - this.charRect.width() / 2, y, this.paintText1);canvas.drawText("%", this.roundRect.centerX() + this.textRect.width() / 2 - this.charRect.width() / 2, y, this.paintText2);}}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {this.roundRect = new RectF(this.progressWidth, this.progressWidth, w - this.progressWidth, h - this.progressWidth);}}

转载于:https://www.cnblogs.com/rainboy2010/p/5391643.html

Android一个自定义的进度环:ProgressChart相关推荐

  1. android 环形时间显示_Android_Android实现自定义圆形进度条,今天无意中发现一个圆形进度 - phpStudy...

    Android实现自定义圆形进度条 今天无意中发现一个圆形进度,想想自己实现一个,如下图: 基本思路是这样的: 1.首先绘制一个实心圆 2.绘制一个白色实心的正方形,遮住实心圆 3.在圆的中心动态绘制 ...

  2. android自定义带进度条的圆形图片

    前言:在项目听新闻的改版中需要实现环绕圆形新闻图片的进度条功能,作为技术预备工作我就去看了一些网上的相关的原理,做了一个自定义带进度条的圆形图片的demo,并将这个实现写成文章发布出来,谁需要了可以进 ...

  3. android绘制环形进度_Android动态自定义圆形进度条

    这篇文章主要介绍了Android动态自定义圆形进度条,需要的朋友可以参考下 效果图: A.绘制圆环,圆弧,文本 //1.画圆环 //原点坐标 float circleX = width / 2; fl ...

  4. android 图片处理过程中添加进度条,『Android自定义View实战』给我一个图标,还你一个水波纹进度球...

    前言 我们都知道,平时表现进度的方式有千千万万种(没有UI想不到的,只有你做不到的= =.),其中有一种就是水波纹进度球的形式,网上很多种实现都是直接采用纯色填充的方式,即水波纹都是纯颜色填充,效果看 ...

  5. Android 自定义View,自定义属性--自定义圆形进度条(整理)

    很多的时候,系统自带的View满足不了我们的功能需求,那么我们就需要自定义View来满足我们的需求 自定义View时要先继承View,添加类的构造方法,重写父类View的一些方法,例如onDraw,为 ...

  6. Android O 自定义通知实例及一个自定义自动适配缩放图片至特定大小的田字格ImageView

    这一篇博文的思路很简单,没有什么深入的理论,源由是最近在实习公司里开发用到了Android O的通知,发现与以往有所不同,相关的资料是有,但是大部分都不适用于这个版本,这里只是写一个非常简单的Demo ...

  7. Android自定义半圆进度条 半圆渐变色进度条带指示 半圆开口大小可自由修改

    Android自定义半圆进度条 半圆渐变色进度条带指示 半圆开口大小可自由修改 首先我们来看下效果图 不同的开口大小只需要修改一个参数即可 半圆1: 半圆2: 半圆3: 如果是你想要的效果,就直接滑动 ...

  8. Android 各种自定义进度条Progressbar

    Android 自定义进度条 Progressbar 控件集合 关于我,欢迎关注 博客:ccapton(http://blog.csdn.net/ccapton) 微信:Ccapton Github ...

  9. android自定义圆形进度条,实现动态画圆效果

    自定义圆形进度条效果图如下:应用场景如动态显示分数等. view的自定义属性如下attr.xml <?xml version="1.0" encoding="UTF ...

最新文章

  1. PYTHON学习笔记-DAY-16
  2. JVM中垃圾收集算法
  3. Python输入输出练习,运算练习,turtle初步练习
  4. java中字节码_Java字节码浅析(三)
  5. struts-execl.xml
  6. win7笔记本为手机共享wifi
  7. 最小二乘支持向量机的分析与改进及Python实现
  8. Javascript:getElementsByClassName
  9. Asp.NET Core2.0 EF ABP Postgresql 数据迁移
  10. 人工智能ai算法_AI算法比您想象的要脆弱得多
  11. cmake 学习笔记(三)
  12. cocos2d-x2.2.5走四棋儿源代码“开源”
  13. 毕设项目 - 基于SSM的旅游资源网站(含源码+论文)
  14. dragonfly数据库
  15. zigbee加PA信号增强方案:rfx2401+cc2530
  16. 八、CSS基础选择器
  17. 数据结构实验八 图及其应用
  18. 工控随笔_05_西门子_Step7软件仿真方法
  19. Webstorm2018激活和汉化
  20. 如何通过触摸屏修改PLC中电机运动控制参数

热门文章

  1. sscanf函数和正则表达式
  2. Linux C获取文件属性
  3. makefile常用语法讲解(1)
  4. C# 中 for和foreach 性能比较,提高编程性能
  5. /deep/使用方式方式;/deep/无效; ::v-deep和>>>使用;
  6. [react] 请说说react中Portal是什么?
  7. React开发(173):ant design设置额外的展开行
  8. [vue] vue和angular有什么区别呢?
  9. [css] 说说你对line-height是如何理解的?
  10. [css] css中兼容ie浏览器的前缀是什么?