简介

实现了一个计时器APP,程序界面简洁,只有一个时间显示区域和两个图片按钮,一个按钮是开始/暂停,另一个按钮是停止。

功能介绍

  • 一个显示界面,当最小计时单位为0.1秒时,显示为:分钟:秒:0.1秒。例如:03:18:9;当最小计时单位为1秒时,显示为:分钟:秒。例如:04:23

  • 两个按钮,左边的是开始计时,计时过程中点击为暂停计时功能右边的按钮为停止计时功能。



  • 菜单功能有两个,

    设置计时器单位有两种可选,1秒和0.1秒



代码实现

  • 时间展示

            if (1000 == mlTimerUnit) {
    // 秒
    settingTimerUnitFlg = SETTING_SECOND_ID;
    tvTime.setText(R.string.init_time_second);
    } else if (100 == mlTimerUnit) {
    // 0.1秒
    settingTimerUnitFlg = SETTING_100MILLISECOND_ID;
    tvTime.setText(R.string.init_time_100millisecond);
    }
                            // 设置时间展示
    int min = (totalSec / 60);
    int sec = (totalSec % 60);
    try{
    if (SETTING_SECOND_ID == settingTimerUnitFlg) {
    // 秒
    tvTime.setText(String.format("%1$02d:%2$02d", min, sec));
    } else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {
    // 0.1秒
    tvTime.setText(String.format("%1$02d:%2$02d:%3$d", min, sec, yushu));
    }
    } catch(Exception e) {
    tvTime.setText("" + min + ":" + sec + ":" + yushu);
    e.printStackTrace(); }
    break;

    其中变量具体含义为

    图变量定义

  • 开始暂停按钮

        View.OnClickListener startPauseListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    if (null == timer) {
    if (null == task) {
    task = new TimerTask() {
    @Override
    public void run() {
    if (null == msg) {
    msg = new Message();
    } else {
    msg = Message.obtain();
    }
    msg.what = 1;
    handler.sendMessage(msg);
    }
    };
    }
    timer = new Timer(true);
    timer.schedule(task, mlTimerUnit, mlTimerUnit);
    }
    // 开始
    if (!bIsRunningFlg) {
    bIsRunningFlg = true;
    } else { // 暂停
    try{
    bIsRunningFlg = false;
    task.cancel();
    task = null;
    timer.cancel(); // 取消计时
    timer.purge();
    timer = null;
    handler.removeMessages(msg.what);
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }
    };
  • 停止计时按钮

        // 停止
    View.OnClickListener stopListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    if (null != timer) {
    task.cancel();
    task = null;
    timer.cancel(); // 取消计时
    timer.purge();
    timer = null;
    handler.removeMessages(msg.what);
    }
    mlCount = 0;
    bIsRunningFlg = false;
    if (SETTING_SECOND_ID == settingTimerUnitFlg) {
    // 秒
    tvTime.setText(R.string.init_time_second);
    } else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {
    // 100 毫秒
    tvTime.setText(R.string.init_time_100millisecond);
    }
    }
    };
  • 设置菜单

    public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    设置子菜单

    // 设置子菜单的名称
    SubMenu settingMenu = menu.addSubMenu(0, SETTING_TIMER_UNIT_ID, 0, R.string.menu_setting_timer_unit).setIcon(R.drawable.setting);
    // 按对应的名称增加子菜单
    settingMenu.add(1, SETTING_SECOND_ID, 0, R.string.menu_setting_second);
    settingMenu.add(1, SETTING_100MILLISECOND_ID, 1, R.string.menu_setting_100milisec);
    // 退出
    menu.add(0, EXIT_ID, 2, R.string.menu_exit).setIcon(R.drawable.exit);

    选择菜单

        public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case SETTING_TIMER_UNIT_ID:
    break;
    case EXIT_ID:
    finish(); // 退出应用
    break;
    case SETTING_SECOND_ID: // 秒
    if (SETTING_SECOND_ID != settingTimerUnitFlg) {
    mlTimerUnit = 1000;
    settingTimerUnitFlg = SETTING_SECOND_ID;
    }
    tvTime.setText(R.string.init_time_second);
    break;
    case SETTING_100MILLISECOND_ID: // 100毫秒
    if (SETTING_100MILLISECOND_ID != settingTimerUnitFlg) {
    mlTimerUnit = 100;
    settingTimerUnitFlg = SETTING_100MILLISECOND_ID;
    }
    tvTime.setText(R.string.init_time_100millisecond);
    break;
    default:
    break;
    }
  • 遇到的问题

    菜单项现在显示不出来,原本最初还是右上角有三个点的菜单项,但是奇妙的是过了一段时间后运行发现那个菜单项不显示了,开始以为是代码出错了,检查之后发现没有问题,觉得可能是系统不显示了,网上有很多解决这个问题的办法,但尝试多次后都没有用,然后又尝试了使用不同的方法创建菜单,结果都不显示,后来看到这篇文章安卓模拟器的菜单键找不到在什么位置,觉得我可能跟这个一样吧,后来又查找到在虚拟机上运行时,按快捷键Ctrl+M可以显示菜单,尝试之后我的菜单项终于出来了!虽然还是不能直接显示。

反思与总结

这个APP的功能很少,待改进的地方很多,应该说从一开始就没想着做一个很复杂的APP,对自己的要求太低了。但是从这个过程中还是学到了一些技巧,希望以后能继续加油,争取做处更好的。

暑假App的更多相关文章

  1. 20172321 20172333 2017-2018 暑假作业APP

    20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...

  2. 暑假作业app博客

    一.光照传感器 界面 简介 运用了传感器类,通过手机的感应区根据当时的光照强度显示出数据. 核心代码 protected void onCreate(Bundle savedInstanceState ...

  3. 二维码跳转不同的 app store

    说道二维码 之前是用来跳转app store  然后在就是出来的 扫码付款什么的 用的很平常,其实里面也很简单   自己刚开始接触的时候     同事说要做一个二维码下载 应用 => 我=懵逼 ...

  4. 兜转数年,老跳成了卖过软件开过店写过APP的电脑老师

    老跳(因为性格太跳,被大家公认的外号),87年生,湖南人,上篇中老赵的大学下铺兄弟. 2008年大学毕业两人一同去的广州,住在求职公寓里找工作. 老赵找工作找了半个月,老跳却在到广州的第二天就开始上班 ...

  5. 20172328 暑假作业 之 实现安卓小程序Enjoy-all

    20172328 暑假作业 之 实现安卓小程序Enjoy-all 项目介绍 项目名称: Enjoy - all 项目简介: 本项目基于Java语言和Anroid Studio软件,实现了简单的冒泡.屏 ...

  6. APP分析之海豚睡眠

    APP分析之海豚睡眠 产品:海豚睡眠 引文 由于笔者暑假经常晚睡,导致在习惯性失眠.长时间睡眠不足,导致头脑反应迟钝,还整日无精打采,不知所措.一个偶然的机会,在一个燥热的夜晚,眼看又是一个不眠之夜, ...

  7. 2017-2018-20172311 暑期编程作业:APP

    2017-2018-20172311 暑期编程作业:实现一个简单倒计时APP 写在前面:暑假的时候就单纯的想要设计一个倒计时软件,然后就通过查阅资料等学了一些,包括实现倒计时功能及显示:背景音乐的添加 ...

  8. 雪球、牛股王这种股票类App 到底能否帮你赚到钱?

    核心观点 股民这个大群体,是需要区分对待的:其中包含一小部分有自己独立判断能力的投资者和一大群没有自己判断能力(尽管他们经常觉得自己有)的普通散户. 当前的互联网证券类App,确实很难保证帮股民赚到钱 ...

  9. 20172305 暑假作业 之 TimeCalculate & Save Iron Man

    20172305 暑假作业 之 TimeCalculate & Save Iron Man TimeCalculate 项目介绍 项目名称: TimeCalculate 项目简介: 本项目基于 ...

随机推荐

  1. prometheus监控redis

    下载redis_exporter插件 代理插件不一定非要安装在redis端 wget https://github.com/oliver006/redis_exporter/releases/down ...

  2. 【memcached的常用操作】

    memcache是一个KEY-VALUE存储缓存数据库,常用作网站数据请求的存储; 提供多种API: 语法简单类似于redis; #设置一个键值存储 #添加一个键值存储 #获取键值 #删除键值 #清空 ...

  3. HIve常用CLI命令

    1. 清楚屏幕:Ctrl+L 或者!Clear 最后加上分号 2. 查看数据仓库中的表:show tables; 3. 查看数据仓库中内置函数:show functions: 4. 查看表结构 :de ...

  4. Python学习 :面向对象 -- 三大特性

    面向对象的三大特性 一.封装 把数据.值.变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1.创建对象 2.通过对象执行类中的一个 ...

  5. mysql 日志log

    my.ini log-error=D:/phpStudy/PHPTutorial/MySQL/log/error.loglog=D:/phpStudy/PHPTutorial/MySQL/log/my ...

  6. svn文件管理

    将VS2010工程提交给Git管理时需要哪些文件:    *.h  *.cpp  *.sln  *.vcxproj  *.vcxproj.filters  *.qrc以及Resources目录下的资源 ...

  7. 版本控制工具——SVN

    一.需求 需求之一:备份 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流 需求之二:代码还原 这个项目中需要一个很复杂的功能,老王摸索 ...

  8. 20170607 JDBC课堂实践 任务四

    20170607 JDBC课堂实践 任务四 题目 查询world数据库,查询哪个国家的平均寿命最长. 码云链接 SQL语句 SELECT Code, Name, LifeExpectancy FROM ...

  9. 20155229 2016-2017-2 《Java程序设计》第四周学习总结

    20155229 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六章: extends:继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法,只要 ...

  10. 随笔三 安装Linux操作系统

    一.虚拟机安装Ubuntu图文教程]在自己笔记本上安装Linux操作系统 我参考了VirtualBox虚拟机安装Ubuntu的图文教程,根据图片和所附内容一步步的将虚拟机安装到位,没看安装教程之前完全 ...