系统提供的环形进度条无法显示进度,且不会停止转动,所以要用到能显示进度的进度条时,只能自己定义一个控件。

API Demos里面有提供类似的画法,API Demos --> Graphics --> Arcs。

若想做到如上图所示的最终效果,且×××进度的部分是通过动画渐渐生成的,则步骤如下:

(1)首先新建一个类,继承View或者ProgressBar或者ImageView都可以,区别就在于若继承ProgressBar或者ImageView则我们自定义的控件也会具有这些父类的属性,比如继承ProgressBar时,运行就会发现除了我们画出来的控件之外,还能看到系统的无尽进度条。若想去除,则将onDraw()方法中的super.onDraw(canvas)删除即可。其实一般都是继承View即可。

(2)创建画笔,若想画圆环,而不是实心圆,则画笔要设置成空心格式:

mPaint.setStyle(Style.STROKE);再通过mPaint.setStrokeWidth(50)来设置画笔宽度。上图所示效果其实是由一个背景蓝色圆环和一个进度条×××圆弧构成,所以要创建两个画笔。

(3)画出背景圆环:在onDraw()方法中写canvas.drawCircle(150, 150, 100, mPaint_bg);

(4)画圆弧进度条:画圆弧的方法为canvas.drawArc(oval, -90, angle, false, mPaint);

第一个参数是一个椭圆,作为画圆弧的模板,第二个参数表示起始角度,第二个参数表示转动的总角度,第三个参数表示是否要画出圆内部分。所以要先创建一个椭圆对象:RectF oval = new RectF(50, 50, 250, 250);要想达到如上图所示效果,则椭圆要与背景圆完全重合,自己要计算好坐标。因为要实现动画生成进度的效果,所以第三个参数要设置为一个变量,实时变化。

(5)写一个方法,可以外部调用,来设置进度条的进度:

public void setProgress(int progress)

{

this.maxProgress = progress;

}

(6)设置动画效果:在构造方法中写:

postDelayed(new Runnable() {

@Override

public void run() {

totalAngle = 360*maxProgress/100;

angle += 5;

invalidate();

if (angle <= totalAngle)

{

postDelayed(this, 80);

}

}

}, 80);

(7)在要用到该控件的类中,放入此控件,并得到控件对象,调用setProgress(int progress)方法即可完成。

备注:

1、drawArc()方法的第四个参数若设置成true,则效果如下:

2、用Style.STROKE风格的画笔画圆弧时,圆弧并不是完全画在椭圆模板的外围,而是一半宽度处于椭圆内部,一半处于外围,同样的,画圆时也一样。将模板圆画出来就可以看到,实际情况如下图所示:

转载于:https://blog.51cto.com/xy4562328/1396917

自定义控件——环形进度条相关推荐

  1. iOS 自定义控件 progressView(环形进度条)

    转帖:http://blog.csdn.net/xiangzhang321/article/details/42688133 之前做项目的时候有用到环形进度条,先是在网上找了一下第三方控件,发现好用是 ...

  2. WPF自定义控件(教程含源码)-圆形进度条、环形进度条

    使用环形进度条显示用量百分比 控件效果如下 控件的关键属性如下: Background:控制背景圆环的原色. Stroke:控制进度圆环颜色.以及中间文本颜色. Value:进度百分比,double类 ...

  3. 【WPF】环形进度条

    WPF中自带有长条形的进度条,大部分场景都算适用,但是仍然有一部分空间小的场景不太合适,此时我们想到安卓上常用的环形进度条,美观,又不占空间. 那么WPF中的环形进度条控件在哪呢? 很遗憾,自带组件中 ...

  4. Android花样loading进度条(四)-渐变色环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们对配文字环形进度条稍加变换,将圆环颜色改为渐变色的形式,使得进 ...

  5. Android花样loading进度条(二)-简单环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们从圆形进度条讲起,讲简单形式的环形进度条,只有进度色彩,没有进 ...

  6. iOS通过CAShapeLayer和UIBezierPath画环形进度条

    UIBezierPath可以绘制矢量路径,而CAShapeLayer是Layer的子类,可以在屏幕进行绘制,本文主要思想是:CAShapeLayer按照UIBezierPath的矢量路径进行绘制. 效 ...

  7. 用svg实现一个环形进度条

    svg实现环形进度条需要用到的知识: 1.会使用path的d属性画一个圆环 //用svg的path元素的A命令画圆<pathd="M cx cym 0 -r a r r 0 1 0 0 ...

  8. js svg语音波动动画_SVG实现环形进度条的原理

    之前在项目中遇到一个环形进度条的需求,要求能实时更新进度,脑海中瞬间便蹦出css,svg,canvas3中方案,对于3种方案个人更偏向于svg,用法简单,代码量也很少,同时也便于实时控制.具体效果如下 ...

  9. canvas实现半圆环形进度条

    html部分 <canvas id="canvas" width="150" height="150"><p>抱歉, ...

最新文章

  1. Java语言中的生僻知识
  2. Navicat 12连接MySQL8服务器
  3. 一些意想不到的小bug。
  4. 14. 不修改数组找出重复的数字【难度: 一般 / 知识点: 抽屉原理 二分】
  5. 三菱gx软件初始化失败怎么解决_三菱PLC的常见问题大全!
  6. 四针角oled屏连接arduino_和孩子一起做个显示温湿度的oled屏桌面摆件[青创小电视]...
  7. 微信朋友圈装x代码_微信朋友圈装逼教程,微信小程序怎么制作“朋友圈”信息...
  8. JavaScript如何打开和使用JavaScript控制台
  9. c语言中u8,u16,u32和int区别
  10. Android的资源引用(2)(Drawable)
  11. 平衡小车PID,就该这么调!!!
  12. 开年新书热销榜 TOP10
  13. (附源码)app校园购物网站 毕业设计 041037
  14. ubuntu 安装 navicat
  15. Cadence IC618使用
  16. 事件营销说到底就是抓住热点事件做营销
  17. 计算机组装win7实训报告,计算机基础1实验报告win7基本操作.docx
  18. c语言程序设计上机实践,C语言程序设计上机实践心得报告
  19. HTML学习笔记(五)_HTML5表单相关元素和属性
  20. Android Unicode与文本字符串互相转换

热门文章

  1. 《数字信号处理》 学习总结
  2. 成绩分析系统c语言实验报告,学生成绩管理系统实验报告
  3. 强烈推荐:Android史上最强大的自定义任务软件Tasker
  4. Android开源项目:捕鱼达人游戏源代码
  5. uni-app web-view导入地图
  6. 微信小程序 bug 集中营
  7. 区块链不是从属角色,而是主导角色 趋向于「基础设施」
  8. 工业相机背光补偿介绍
  9. Amlogic平台固定摄像头facing办法
  10. python量化选股策略 源码及论文_常见的十大量化投资策略(附源码)