现在app越来越要求界面很炫,比如一个加载数据的时候,通常是一个进度条在一直转,直到从服务器上获取到数据,进度条才消失,而大部分都不会使用android自带的进度条,因为不美,比如下面的进度条咋样:
其实这个蓝色背景是跟着进度条的进度颜色会发生改变,因为没有找到哪种动态类似gif动画,如果有那个给你,一眼就知道是动态的,虽然不是说非常漂亮,但至少比我们android自带的要美观很多,今天就讲讲这个是怎么实现的,当然了实现重要的是分析,没有一个逻辑的分析,以后遇到类似的还是不会,现在就分析下我是怎么实现的过程:
1:因为是动态的,相当于一个圆的弧度在变小,另外一个圆的弧度在变大,而且是相反方向的,既然说是二个弧度,我们知道在Canvas给我们提供了一个方法drawArc(),因此前面必须有个正方形或者长方形,但是我们这是圆形的进度条,因此需要一个正方形,而圆就是该正方形的内切圆,怎么画出这个正方形呢,很简单,只要知道左上角和右下角2个坐标点即可!
如图:
左上角的点我们可以设置为(0,0).而右下角左边,其实就是getWidth(),getHeight(),因为可以在布局问题中设置了高度和宽度以后就会获取这个控件的宽和高,所以这个正方形就出来了,
2:上面分析了为什么要使用正方形,那么有了这个条件还远不足以让我们实现这个功能,我们知道画弧.是需要你在那开始画,也就是其实点,然后要画多少的弧,那么又给我们带了2个问题,
a:其实弧度,这个很好理解,下面一张图就可以说明问题:
b:其实弧度该怎么算,这个确实有点难,但是你要想有什么已知条件,结合这个已知条件是不是可以获取这个值呢?比如这个控件的高度其实就是圆的直径,当每添加了一个进度,蓝色的背景就会覆盖多点位置,比如这个进度的最大值为100,你移动了1px,那么相当于你在下面往上面移动的高度为1/100*getHeight(),继续画图理解: