今天要实现的是自定义View实现一款简易时钟,主要就是练习如何进行自定义View,所以基本上没有什么美感可言。下面,我们就开始了。

要实现这款简易时钟,我们还是要先分析出它所包含的元素。就以上面的效果图来说,基本上包括了:最外圈大表盘以及内部中间两个小圆圈,刻度线,刻度文字,表针,数字时间以及上方作者名称。OK,一共就这么多的元素,下面我们就可以开始了。
第一步,绘制表盘以及最中间的两个小圆圈:
|
|
很简单,就是直接绘制三个圆,半径大小不一致罢了。
第二步,绘制刻度线:
|
|
这里面用到了canvas.rotate(360 / 60, 0, 0),rotate表示的是画布旋转,后面的参数是旋转中心点的x以及y坐标。这样,每次画布旋转6度,进行刻度的绘制。
第三步,绘制刻度线的文字:
|
|
这样,就绘制出了刻度文字。其实,绘制刻度文字是可以利用rotate(),只不过这样利用画布旋转绘制出的文字有的是倒立的。似乎是我以3点为基准出现的问题。最后,没办法,就利用三角函数,以1点为基准绘制完成了。为何以1点为基准呢?因为循环从1开始啊。。。
第四步,绘制指针并让其动起来:
在绘制指针之前我们是要得到当前的时间的,然后,指针顺着当前时间运动。所以,先要获取当前时间:
这里利用了Calendar,得到当前的时间。然后,计算出各个指针需要旋转的角度。这里,注意,秒针走一秒,分针走当前秒数 0.1(6/60 = 0.1)度。而分针走0.1度,时针走当前分钟数 0.5(6*30/360 = 0.5)度。
|
|
这里先用save()方法保存整个画布状态,在每次绘制指针前,再次保存画布状态。然后,在绘制指针前都旋转相应的角度。一次次旋转,看起来就像指针在动。之所以每次绘制指针前都保存画布是为了不让三个指针互相干扰。每一个指针都在一层独立的画布上。当然,这一步,一定要将指针绘制到12点的位置,3个指针都是。因为你算出的旋转角度就是从12点起,到12点结束,360度。
第五步,绘制数字时间:
|
|
第六步,绘制作者名字:
|
|
这两步代码基本一样,只是方向相反,也是很简单。
最后,给出onDraw()中的代码:
|
|
到此为止,就完成了这个简易时钟的绘制。