1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的:
invalidate()方法
rectf方法的应用
onmeasure方法的应用
2.原理
画3层圆角矩形,底层为黑色,第二层为灰色,最上一层为进度条颜色,示例图如下:
3.效果图
实现圆角进度条还有很多其他方法,比如在progress控件里填充圆角图片,通过拉伸图片来达到预想的效果,虽然听起来很简单,但实现起来还是有些麻烦的。
4.解说方法
(1)invalidate()方法
invalidate()是用来刷新view的,必须是在ui线程中进行工作。比如在修改某个view的显示时, 调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主ui线程队列中pop掉。一般在自定义控件中会用到这个方法。
(2)rectf方法的应用
rectf是用来绘画矩形的方法。
rectf(left,top,right,bottom),四个参数的含义分别是父控件距离矩形左上右下边距的距离,以下用图来说明:
drawroundrect方法是用来绘制圆角矩形的,它的参数如下:
参数说明
rect:rectf对象。
rx:x方向上的圆角半径。
ry:y方向上的圆角半径。
paint:绘制时所使用的画笔。
(3)onmeasure方法
指定自定义控件在屏幕上的大小,onmeasure方法的两个参数是由上一层控件 传入的大小,而且是模式和尺寸混合在一起的数值,需要measurespec.getmode(widthmeasurespec) 得到模式,measurespec.getsize(widthmeasurespec)得到尺寸。
onmeasure的几种模式分别为exactly,at_most,unspecified。
[1]measurespec.exactly
measurespec.exactly是精确尺寸,当我们将控件的layout_width或layout_height指定为具体数值时如andorid:layout_width=”50dip”,或者为fill_parent是,都是控件大小已经确定的情况,都是精确尺寸。
[2]measurespec.at_most
measurespec.at_most是最大尺寸,当控件的layout_width或layout_height指定为wrap_content时