刚开始做这个Calendar之前,在网上搜了相关的例子,找到了Calendarde的源码。但是源码非常多,仅这个页面的源码都达到5000行,而且里边实现的功能比较多,所以看这个代码花了我一天的时间才有一点眉目,但是还是看不懂,后来请教了学长,学长建议我可以用ListView来实现。

于是接下来根据视频教程模仿这写好了24ListView,其中用到了SimpleAdapter适配器。在接下来的学习中用自定义的CalendarAdapter替换了SimpleAdapter。因为API中封装好的适配器功能有些简单,大部分用的都是自定义的继承自那些类的Adapter。这样能更好的满足大家的需求。

画好了ListView之后就该实现背景色的填充了。首先精确到小时,先实现比当前时间小的ListView的背景色改变,这个比较简单。然后再精确到分钟,我首先想到的是在当前小时这个ListViewItem中绘制一个矩形来实现,矩形的长宽由分钟数计算而得。有了这个思路后就开始写代码了,但是却遇到了很多麻烦。首先我怎么去获得当前小时的ListView呢?如果这个视图是ListView数组就好办了,直接获取下标值就行了,但是这个怎么来确定当前视图呢?后来才知道CalendarAdapter中有个getView(),此方法返回一个View对象,而这个对象就是当前小时的视图,于是就新建一个视图类来调用onDraw方法话矩形。运行之后发现canvas画布充满了整个屏幕。查了好多资料都没有解决,后来请教学长学姐,然后在getView()方法中添加了一个<LineaLayout>布局,在该布局中调用onDraw方法后问题就解决了。

在当前小时中添加矩形这个问题困扰我了一天半,我查阅各种资料,逛好多论坛都没有找到问题的所在,后来在学长学姐的帮助下给解决了。所以,以后如果遇到问题了,自己画了好长时间都没有解决,那就不要再浪费时间了,请教别人或许是不错的选择。其实,高手往往就在我们身边……