关于自定义Calendar的若干问题
2013-06-06 20:48
162 查看
这两天有在做一个Calendar,相当是在模仿手机自带Calendar所做的。效果如下:
而做这个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项显示在手机屏幕的最顶端
而做这个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项显示在手机屏幕的最顶端
相关文章推荐
- 关于IOS自定义视频播放器若干问题的整理(上篇)
- 关于浏览器滚动条自定义美化的若干问题
- C++中关于使用到CString的若干问题
- 关于svn上传的代码每个java文件上都出现class问件暨代码编译路径的若干问题
- 关于自定义Adapter中更新界面的问题
- 与Janet关于敏捷测试若干问题的Q&A
- 关于自定义TextView的测量问题
- 关于自定义View时,画图形和图片时抗锯齿的使用的问题
- 关于程序员职业生涯的若干问题思考
- 关于网络学习的若干问题 --- 子网划分,子网掩码,主机地址等划分方法
- 关于java的自动拆装箱若干细节问题
- 关于各种进制的转换与数据在编辑框中显示的若干问题
- 关于fusionchart的若干问题
- 关于扩展HTMLParser,解决自定义tag的问题
- Android起步 - 关于Eclipse的若干问题
- 关于Calendar控件的不可用问题/
- 关于3DsMax与Unity坐标轴的若干问题详解
- 【重头学习Android】关于自定义相机后照相旋转问题终极解决方案
- Android 与Springmvc之间交互若干问题(消息,文件,自定义dialog...)
- Android开发之AlertDialog 关于重写onCreatDialog自定义对话框的问题 问题出自于《疯狂Android讲义》这本书