这两天有在做一个Calendar,相当是在模仿手机自带Calendar所做的。效果如下:

204749317.png

而做这个Calendar的时候有五个要求:

1.显示当天日期

2.显示当前时间

3.区分小时

4.区分过去与将来

5.进入显示前后8小时


那么如图所示,最上面的红色为一个TextView,显示当天日期;有一条蓝色的线显示当前时间;区分小时也就是显示出24小时,在左侧;而区分过去与将来则是用灰色和白色来区分;这个图就是进入App所显示的画面,显示了前后的8个小时。而图中的绿色是我所添加的事件要显示的颜色,在这里就先不介绍了。


那么在这里面遇到的问题有:

1.如何显示当前日期?

这个就容易解决了,在Java中有一个Calendar这个类,用这个类可以很轻松的获取当前日期,并在TextView中显示。

//显示当前日期

mCalendar = Calendar.getInstance();

mHours = mCalendar.get(Calendar.HOUR_OF_DAY);

int year = mCalendar.get(Calendar.YEAR);

int month = mCalendar.get(Calendar.MONTH) + 1;

int day = mCalendar.get(Calendar.DAY_OF_MONTH);

int week = mCalendar.get(Calendar.DAY_OF_WEEK);

      String Sweek = null;

switch (week) {

case 1:Sweek = "周一";break;

case 2:Sweek = "周二";break;

case 3:Sweek = "周三";break;

case 4:Sweek = "周四";break;

case 5:Sweek = "周五";break;

case 6:Sweek = "周六";break;

case 7:Sweek = "周日";break;

      }

mTextTime.setText(year + "." + month + "." + day + "  " + Sweek);

2.如何实现显示当前时间?

由于我们是以ListView来区分小时的,所以我们只要先获取当前时间的分钟数,再除以60,得到的分数再乘以ListView每一个Item的高度,那么在相对就的Position中去画,就好办了。

mCalendar = Calendar.getInstance();

// 取得当前时间

mNumOne = mCalendar.get(Calendar.MINUTE);

mNumTwo = mNumOne / 60;

mTimes = (int) (mNumTwo * Height);

//画当前时间线

mPaint.setColor(Color.BLUE);

       canvas.drawRect(0,mTimes, Height * 9, mTimes + 2, mPaint);

3.怎么实现区分过去与将来?

区分过去与将来,那官方给的思路就是在当前时间线以上和下面,以不同颜色来进行处理,让人一目了然。

而要实现这个功能,就要先找到当前时间以前的Position,然后再将它们画成灰色;找到当前时间所在Position,然后当前时间线以上为灰色,以下还是白色。

4.怎么实现进入显示前后8小时?

这就需要用到一个ListView的方法了,mList.setSelection()在参数中传入不同的整数,就会让App在进入以后置顶不同的ListView了。例如,mList.setSelection(7),会将ListView的第7项显示在手机屏幕的最顶端