CircleProgressBar

简介: 今天又写了一个demo,带有两个进度值的 圆环进度条,原谅我是个小白,只能写一写简单的自定义控件,我会继续努力的。。先看效果图001.gif@Overrideprotected void onDraw(Canvas canvas...

今天又写了一个demo,带有两个进度值的 圆环进度条,原谅我是个小白,只能写一写简单的自定义控件,我会继续努力的。。先看效果图

001.gif

<pre>
@Override
protected void onDraw(Canvas canvas) {
/*偏移量*/
float dMax = (dotDiameter - maxProgressWidth)*0.5F;
float dFirst = (dotDiameter - firstProgressWidth)*0.5F;
float dSecond = (dotDiameter - secondProgressWidth)*0.5F;
/*1.圆心(x,y)坐标值*/
float centerX = (width - getPaddingLeft() - getPaddingRight()) / 2.0f;
float centerY = (height - getPaddingTop() - getPaddingBottom()) / 2.0f;
/*2.圆环半径*/
float maxRadius = centerY - maxProgressWidth / 2;
float firstRadius = centerY - firstProgressWidth / 2;
float secondRadius = centerY - secondProgressWidth / 2;
if (getWidth() >= getHeight()) {
maxRadius = centerY - maxProgressWidth / 2;
firstRadius = centerY - firstProgressWidth / 2;
secondRadius = centerY - secondProgressWidth / 2;
} else {
maxRadius = centerX - maxProgressWidth / 2;
firstRadius = centerX - firstProgressWidth / 2;
secondRadius = centerX - secondProgressWidth / 2;
}

maxRectF.left =  centerX - maxRadius + dMax;
maxRectF.right = centerX + maxRadius - dMax;
maxRectF.top = centerY - maxRadius + dMax;
maxRectF.bottom = centerY + maxRadius - dMax;

firstRectF.left =  centerX - firstRadius + dFirst;
firstRectF.right = centerX + firstRadius - dFirst;
firstRectF.top = centerY - firstRadius + dFirst;
firstRectF.bottom = centerY + firstRadius - dFirst;

secondRectF.left = centerX - secondRadius + dSecond;
secondRectF.right = centerX + secondRadius - dSecond;
secondRectF.top = centerY - secondRadius + dSecond;
secondRectF.bottom = centerY + secondRadius - dSecond;

canvas.drawArc(maxRectF, 0, 360 , false, maxProgressPaint);

float firstAngle = (float) 360 \* firstProgress / (float) maxProgress;
float secondAngle = ((float) 360 \* secondProgress / (float) maxProgress);
float dotAngle =  (float) (Math.PI\*secondAngle/180.0F);

canvas.drawArc(firstRectF, 0 - 90, firstAngle, false, firstProgressPaint);
canvas.drawArc(secondRectF, 0 - 90, secondAngle , false, secondProgressPaint);

float dotCx = (float) (width\*0.5 + (width - dotDiameter)\*0.5 \* Math.sin(dotAngle));
float dotCy = (float) (height\*0.5 - (height -dotDiameter) \*0.5 \* Math.cos(dotAngle));
if(canDisplayDot){
    canvas.drawCircle(dotCx, dotCy, dotDiameter \* 0.5F, dotPaint);
}

}
</pre>

源码地址

<a href="https://github.com/Alex-Cin/CircleProgressBar">https://github.com/Alex-Cin/CircleProgressBar</a>

apk 下载地址

<a href="http://fir.im/z3xb">http://fir.im/z3xb</a>

目录
相关文章
|
8月前
|
存储 程序员 C语言
C语言变量命名规则
C语言变量命名规则
418 0
|
8月前
|
机器学习/深度学习 人工智能 搜索推荐
人工智能发音评估(Artificial Intelligence Pronunciation Scoring, AI-PS)
人工智能发音评估(Artificial Intelligence Pronunciation Scoring, AI-PS)
611 2
|
机器学习/深度学习 存储 弹性计算
使用 Databricks 和 MLflow 进行机器学习模型训练和部署的应用实践| 学习笔记(一)
快速学习使用 Databricks 和 MLflow 进行机器学习模型训练和部署的应用实践
977 0
使用 Databricks 和 MLflow 进行机器学习模型训练和部署的应用实践| 学习笔记(一)
|
开发工具 git
Git - 拉取远程分支并创建本地分支(一)
Git - 拉取远程分支并创建本地分支(一)
637 0
|
8月前
|
存储 安全 前端开发
WordPress未经身份验证的远程代码执行CVE-2024-25600漏洞分析
WordPress未经身份验证的远程代码执行CVE-2024-25600漏洞分析
300 0
|
8月前
|
前端开发
useEffect 的第二个参数, 传空数组和传依赖数组有什么区别?
在 React 的 useEffect 钩子函数中,第二个参数用于指定依赖项数组。这个参数可以影响 useEffect 的触发时机和频率。在 React 的 useEffect 钩子函数中,第二个参数用于指定依赖项数组。这个参数可以影响 useEffect 的触发时机和频率。
223 0
|
8月前
|
存储 关系型数据库 MySQL
最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)
作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,助你向阿里“开炮”,拿下offer没啥问题。
干货三:CountDownTimer倒计时工具类
干货三:CountDownTimer倒计时工具类
79 0
|
8月前
|
监控 Docker 容器
Zabbix【部署 03】zabbix-agent2安装配置使用(zabbix-agent2监控docker实例分享)
Zabbix【部署 03】zabbix-agent2安装配置使用(zabbix-agent2监控docker实例分享)
1133 0
|
机器学习/深度学习 弹性计算 关系型数据库
邀请好友免费试用云产品,咖啡券、咖啡杯、定制T恤等你来领
4月11日阿里云峰会以来,阿里云推出“飞天免费试用计划”,面向国内1000万云上开发者,提供包括云服务器ECS、函数计算FC、数据库PolarDB、机器学习PAI等在内 80多款云产品的免费试用,支持1-12月不等的试用时长。