为了账号安全,请及时绑定邮箱和手机立即绑定

android怎么自定义进度条

标签:
Android

先上效果图android自定义进度条

看到这样的一个设计图, 首先是拆分到底怎么来画这个图。

1,一个进度的圆。

2 ,2个有半圆的进度,一个实心,一个空心

3,下面的半圆进度显示(文字 和 背景框)

初步坐标稿

android自定义进度条

了解这些了,就开始计算具体的坐标,

自定义view第一步

onMeasure

把整个看成一个控件,那么他的高度,就是进度圆的高度,和下面进度文字背景框的高度。

宽度就是外面空心进度条的宽度。

android自定义进度条

然后onDraw

1 先画外面空心的进度(设计稿中红色的那部分)

画一个2边都是半圆的方法

android自定义进度条

RectF 矩形 参赛

left、top、right、bottom的值是:

left:是矩形距离左边的X轴 ( 进度圆的一半)

top:是矩形距离上边的Y轴 (这个高度是进度圆的半径减去空心进度的高度的一半)

right:是矩形距离右边的X轴(控件的宽度减去进度圆的一半)

bottom:是矩形距离下边的Y轴(进度圆的一半加上空心进度的高度的一半)

参赛 rx是指在x轴的幅度,同理 ry在Y轴上的幅度(这里都设置为空心进度条的高度的一半)

因为是空心的 paint必须设置为空心

outLinePaint.setStyle(Paint.Style.STROKE);

android自定义进度条

然后画内进度条

步骤一样,只是参数有点变动

相对外进度 它的左右上下都 向内移动的相同的距离(外进度的高度 减去内进度的高度, 然后在取值的一半))

所以RectF 的left top 加上上面所说的距离 bottom 减去距离

right 由于内进度要一直变动,那么他的right就要重新计算。

android自定义进度条

看图,我们把箭头所指示的线的长度设置为进度总长度,那么他的长度就是

进度条高度+偏移量+(view的总长度-spaceA -spaceB)*进度



android自定义进度条

3 画圆。

canvas.drawCircle(x,y,radius,paint)

y固定,圆的一般,radius 也是固定

x要计算

当进度为0的时候 x在 x=radius 在x=100的时候 x=View的宽度-radius

那么 x=radius+(view的宽度-radius)*进度

android自定义进度条

android自定义进度条

下面画字,记住进度字的背景框的坐标中心和随着圆的中心在同一个x坐标上,就Y坐标不一样而已

(注意 当开始和结尾的时候,由于字体的背景框的长度大于进度圆的直径,所有开始和结尾要判断,当前的进度圆的中心时候大于进度字的背景框的长度的一般。然后在做处理)

字体居中画就ok了,居然就看代码的实现。

另外 设置progress的时候刷新控件就行了android自定义进度条

最后github路径

https://github.com/CQBOBOZHU/NumberProgress

原文链接:http://www.apkbus.com/blog-914653-68359.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消