关于自定义Calendar的若干问题

简介:

这两天有在做一个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,mTimesHeight * 9, mTimes + 2, mPaint);

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

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

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

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

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


本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1217506,如需转载请自行联系原作者

相关文章
|
3月前
|
Java
java将输入的字符串时间提前一天,再以字符串形式输出。输入时间格式为:yyyy-MM-dd
java将输入的字符串时间提前一天,再以字符串形式输出。输入时间格式为:yyyy-MM-dd
18 2
|
11月前
|
Java API
Java常用日期类(包含三代)_Date类及Calendar类等
从JDK 1.0出现。 表示一个日期和时间,精确到毫秒,内部getTime()从1970年1月1号开始算。
80 0
设计一个名为Time的类,这个类包含:表示时间的数据域hour,minute和second
设计一个名为Time的类,这个类包含:表示时间的数据域hour,minute和second
235 0
|
算法 Java Linux
不提你可能不知道,spring定时任务的数字星期域不符合常规的cron定义
大家都知道,使用Spring的定时任务非常的简单方便,只需要在配置类上添加@EnableScheduling注解,同时在定时方法上添加@Scheduled(cron = "* * 1 * * *")便可以设置一个每天1点定时跑的任务
定义一个时钟类(TimeDemo),属性有:时、分、秒(默认值10时30分),方法有展示当前时间、过1秒,过1分钟,过1小时后的时分秒;在测试类中实现过10秒,过10分,过10小时后的时间展示
定义一个时钟类(TimeDemo),属性有:时、分、秒(默认值10时30分),方法有展示当前时间、过1秒,过1分钟,过1小时后的时分秒;在测试类中实现过10秒,过10分,过10小时后的时间展示
364 0
|
Java
编写Java程序随机输入日期计算星期几,打印任意一年的日历
编写Java程序随机输入日期计算星期几,打印任意一年的日历
301 0
编写Java程序随机输入日期计算星期几,打印任意一年的日历
|
前端开发
bootstrap 日期控件起始日期&结束日期相互约束
bootstrap 日期控件起始日期&结束日期相互约束
287 0
bootstrap 日期控件起始日期&结束日期相互约束
SAP事务码MM02里的字段属性控制
You can not save a material in MM02 without maintaining ANP code in QI3/504 because the ANP code is configured as mandatory there.
SAP事务码MM02里的字段属性控制
SAP CDS view里的日期操作函数(往后推算X天得到新日期)
SAP CDS view里的日期操作函数(往后推算X天得到新日期)
108 0
SAP CDS view里的日期操作函数(往后推算X天得到新日期)
SAP UI5日期字段的显示逻辑和用法
SAP UI5日期字段的显示逻辑和用法
124 0
SAP UI5日期字段的显示逻辑和用法