本人安卓菜鸟,因为学校有一个比赛,所以正在做一个面向高中生的APP。

今天就是来记录一下倒计时功能的实现。


一、我首先做了一个类似下拉框的效果,让用户自己选择自己的年级(高一/高二/高三),然后根据相应的年级计算离高考的日期。

  效果如下:

  这里有个问题就是其实这个里面显示的时间和现实中的时间是相差了八个小时的,但是因为我是在模拟器上测试的,所以增加了一段时间。

后来在打包到手机上一时忘了改,所以才会相差八个小时。


二、其次来分析一下这个功能的实现原理:

1.当下与高考时间(在这里我写的设计的是6月7日)之差,运用函数先获得当今时间,在根据年级设计一下高考时间即可。

//获得当前时间 八小时时间差
final Date startDate = new Date(System.currentTimeMillis()+8*60*60*1000);
 /*** 计算两个日期之间的差这个方法是使用了csdn上一位大佬的方法 我一下子没找到这个大佬写这个方法的链接 不好意思* */private  int countTwoDate(Date startDate,Date endDate){Calendar beginCalendar = Calendar.getInstance();beginCalendar.setTime(startDate);Calendar endCalendar = Calendar.getInstance();endCalendar.setTime(endDate);long beginTime = beginCalendar.getTime().getTime();long endTime = endCalendar.getTime().getTime();int betweenDays = (int)((endTime - beginTime) / (1000 * 60 * 60 *24));//先算出两时间的毫秒数之差大于一天的天数endCalendar.add(Calendar.DAY_OF_MONTH, -betweenDays);//使endCalendar减去这些天数,将问题转换为两时间的毫秒数之差不足一天的情况endCalendar.add(Calendar.DAY_OF_MONTH, -1);//再使endCalendar减去1天if(beginCalendar.get(Calendar.DAY_OF_MONTH)==endCalendar.get(Calendar.DAY_OF_MONTH))//比较两日期的DAY_OF_MONTH是否相等return betweenDays + 1;    //相等说明确实跨天了elsereturn betweenDays + 0; //不相等说明确实未跨天}

根据上述的方法就该知道了,现在我们有了一个startDate,还差一个endDate。 

2.如何根据年级设计高考时间呢?必须是要先获得当前的年份,再根据年级判断相差的年份。

   2.1 我本来是这么做的,设置一个int型变量,如果是高三就是相差一年,如果是高二就是相差两年,如果是高一就相差三年。但是后来想想这样的想法是不准确的。

2.2 例如今天是2018-9-15日,高三生的高考时间是在2019-06-07日,确实是相差了一年。但这是因为已经过了高考日期。

假如今天是2019-2-12,那高考时间时间肯定依然是2019-06-07日,那就是同一年。所以这里应该增加一个比较判断。

2.3 而且我在这里将高考时间设定为两天,即06-07与06-08。

所以假如今天是06-07或者今天是06-08,对于高三生来说高考倒计时都应该是0天,绝对不可能出现-1天。

  //...//这里的position是用来判断选择的是哪个年级,因为只有三个年极段,所以范围是从0-2//subtract就是声明时间差的那个int型变量//subtract2很重要,因为在线程里面有一个很严重的bug就是它会通过subtract--操作改变subtract的值switch (position){case 0:subtract=3;break;case 1:subtract=2;break;case 2:subtract=1;break;}subtract2 = subtract;
//...
            //...//这是改进的方法的一个代码片段 final Date startDate = new Date(System.currentTimeMillis()+8*60*60*1000);if(calendar.get(Calendar.MONTH)<6){//这句代码说明了高中生今年高考subtract--;}else if(calendar.get(Calendar.MONTH)==6){//特殊情况 7号与八号if(calendar.get(Calendar.DATE)==7||calendar.get(Calendar.DATE)==8){flag = true;}}year = calendar.get(Calendar.YEAR)+subtract+"";//year我在这里声明为string类型DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//...
//...
//代码片段 flag首先定义为boolean类型 并且赋初值false   runOnUiThread(new Runnable() {@Overridepublic void run() {interval = countTwoDate(startDate, endDate);if(flag){interval = 0;}tvDate.setText("高考倒计时:\n\n"+interval+"天");tvNow.setText(format);
//这行为subtract重新赋值的代码很重要,因为这样可以避免线程的问题subtract = subtract2;}});
//...

3.高考倒计时应当是随着时间的变迁而变化的,不是一成不变的。

结合上述代码,再参考某位大佬的实施自动更新时间方法

再次感谢网上的大佬们的无私奉献!


我把所有的源代码整理放在了我的个人公众号【大胖猫的马太效应】,回复 高考倒计时 即可获取啦~

最后如果你正好需要这方面的参考,希望这篇文章可以给予你一些些帮助~

有任何关于这个小功能想法或者问题欢迎在下文留言:D

Android:安卓实现高考倒计时功能相关推荐

  1. Android 题目动态存储+倒计时功能实现

    文章目录 一.数据库存储题目信息 1.案例演示 2.实现步骤 2.1.MyDataBaseHepler.java 2.2.QuestionsDao.java 2.3.QuestionActivity. ...

  2. android studio高考倒计时,2019高考倒计时锁屏app-高考倒计时锁屏软件预约v1.0.5-乐游网安卓...

    <高考倒计时锁屏软件>是一款非常不错的锁屏软件,当然锁屏只是软件的其一功能,可以自定义自己的个性锁屏,写上自己喜欢的名言锦句和可以让自己奋发的心灵寄语,在最后放手一搏,同时可以提供一些最后 ...

  3. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

  4. android功能导航布局,安卓9.0新功能 屏幕旋转将与导航栏同窗

    中关村在线消息:今天早些时候谷歌向开发者们推送了Android P(也称安卓9.0)的首个开发者预览版,在原先8.0的基础上进一步改进了通知栏,也为刘海屏幕专门进行了优化.意味着未来"刘海& ...

  5. android倒计时功能,Android 实现列表倒计时功能

    Android 实现列表倒计时功能 发布时间:2020-08-21 21:47:11 来源:脚本之家 阅读:147 作者:Choi晨 单个计时器,然后遍历数据 刷新条目: 两种实现方式:1.Handl ...

  6. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

    Android 5.0新特性有哪些?经过一段时间曝光与测试后,期待已久的Android L系统正式发布了,新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖).Android 5 ...

  7. android欢迎页圆形倒计时,android 欢迎页圆形进度条倒计时功能

    常见app欢迎页圆形进度条倒计时功能,可设置显示文字,进度条颜色,宽度,倒计时时间,内圆颜色.设置进度条类型  顺数进度条(0-100)还是倒数进度条(100-0): 先上效果图: 下面介绍实现逻辑: ...

  8. android倒计时停止,Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),重开 (resume)功能...

    在 Android 使用 Timer 做倒计时.实现开始 (start),取消 (cancel),暂停 (pause),恢复 (resume)功能 在 Android 开发中,我们很多地方会使用到倒计 ...

  9. android自定义秒表,Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原 ...

最新文章

  1. 7种从头开始免费学习编程的方法
  2. 去哪里学习python_Python从哪里开始学?怎么入门?
  3. 区块链以信用为基础,所以目前在中国不可行.
  4. 以Spring Boot的方式显示图片或下载文件到浏览器
  5. 智课雅思词汇---八、ject是什么意思
  6. HDU 3966 Aragorns Story
  7. 龙宫旅游策划方案:5A景区的突破性发展!
  8. Raspberry Pi使用教程
  9. magic3是鸿蒙系统吗,如果荣耀Magic3搭载屏下镜头和鸿蒙系统,你会做第一批吗?...
  10. 测试人员如何管理项目与风险预警
  11. 群体遗传分析—LD连锁不平衡
  12. 深度系统对Java的支持,国产操作系统深度deepin V20体验
  13. Bernoulli分布的特征函数及期望与方差
  14. 史上最简单的mybatis-plus快速入门
  15. MySQL同步到hadoop工具_MySQL数据库实时同步数据到Hadoop分布式文件系统的工具Applier(转)...
  16. 计算机网络学习记录1
  17. KDD CUP99数据集
  18. 掌握 Dart 中库 library 的使用
  19. 创新工场O2O项目布丁六款生活类应用简评
  20. php导航条css代码生成器,怎么使用css代码制作网站导航栏?(示例)

热门文章

  1. .net 发短信案例
  2. 第九届大唐杯国赛获奖名单
  3. 服务器迁移实践,物理服务器迁移到阿里云服务器
  4. 计算机网络机房安置要点,机房平面布置图
  5. lpop 原子_Matter:碳载单原子催化剂用于能量转化和存储的最新进展 – 材料牛...
  6. ORACLE ORDER BY的多种排序
  7. 0x0EA772D7 (msvcr80.dll) 处有未经处理的异常: 0xC000041D: 用户回调期间遇到未经处理的异常。。
  8. canvas机器鸭子走路动画
  9. 手机连接Linux教程,手机密钥连接linux主机
  10. phpExcel单元格内换行