暑假App
简介
实现了一个计时器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的更多相关文章
- 20172321 20172333 2017-2018 暑假作业APP
20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...
- 暑假作业app博客
一.光照传感器 界面 简介 运用了传感器类,通过手机的感应区根据当时的光照强度显示出数据. 核心代码 protected void onCreate(Bundle savedInstanceState ...
- 二维码跳转不同的 app store
说道二维码 之前是用来跳转app store 然后在就是出来的 扫码付款什么的 用的很平常,其实里面也很简单 自己刚开始接触的时候 同事说要做一个二维码下载 应用 => 我=懵逼 ...
- 兜转数年,老跳成了卖过软件开过店写过APP的电脑老师
老跳(因为性格太跳,被大家公认的外号),87年生,湖南人,上篇中老赵的大学下铺兄弟. 2008年大学毕业两人一同去的广州,住在求职公寓里找工作. 老赵找工作找了半个月,老跳却在到广州的第二天就开始上班 ...
- 20172328 暑假作业 之 实现安卓小程序Enjoy-all
20172328 暑假作业 之 实现安卓小程序Enjoy-all 项目介绍 项目名称: Enjoy - all 项目简介: 本项目基于Java语言和Anroid Studio软件,实现了简单的冒泡.屏 ...
- APP分析之海豚睡眠
APP分析之海豚睡眠 产品:海豚睡眠 引文 由于笔者暑假经常晚睡,导致在习惯性失眠.长时间睡眠不足,导致头脑反应迟钝,还整日无精打采,不知所措.一个偶然的机会,在一个燥热的夜晚,眼看又是一个不眠之夜, ...
- 2017-2018-20172311 暑期编程作业:APP
2017-2018-20172311 暑期编程作业:实现一个简单倒计时APP 写在前面:暑假的时候就单纯的想要设计一个倒计时软件,然后就通过查阅资料等学了一些,包括实现倒计时功能及显示:背景音乐的添加 ...
- 雪球、牛股王这种股票类App 到底能否帮你赚到钱?
核心观点 股民这个大群体,是需要区分对待的:其中包含一小部分有自己独立判断能力的投资者和一大群没有自己判断能力(尽管他们经常觉得自己有)的普通散户. 当前的互联网证券类App,确实很难保证帮股民赚到钱 ...
- 20172305 暑假作业 之 TimeCalculate & Save Iron Man
20172305 暑假作业 之 TimeCalculate & Save Iron Man TimeCalculate 项目介绍 项目名称: TimeCalculate 项目简介: 本项目基于 ...
随机推荐
- 『ACM C++』 PTA 天梯赛练习集L1 | 029-033
哈哈,今天开始我也是学车人了~ 开始一千多道疯狂刷题~ ------------------------------------------------L1-029------------------ ...
- TopJUI Combobox onSelect 事件失效BUG
版本:2.2.8 onChange : function(b, c) 两个参数:当前选择后在Combobox中显示的数据,实际是textField:另一个是改变前的数据 onSelect : func ...
- php以数组做为配置文件的读取和写入操作
最近想用php开发个简单的文章管理系统,主要是做一批垃圾采集站,目前网上的cms都太多功能了,导致修改个模板要很多文件,花费很多功夫.开始用thinkphp框架做,感觉还是麻烦,后来改用ci,做好了后 ...
- PHpStorm + phpstudy 断点调试配置
步骤: phpstudy 其他菜单 ->打开配置文件 ->打开 php.ini ->找到 XDebug ->XDebug修改成下面文字 [XDebug] :红色 (1 ...
- 第一篇 C/C++基本语言类型
总概: { C:面向过程,以过程为中心,以算法为驱动 } { C++:面向对象,以过对象中心,以消息为驱动 个人理解:一切皆对象的思想 } 一 前言总概 1.常量变量 初始化对象与赋值是两个概念 直接 ...
- ACM1013:Digital Roots
Problem Description The digital root of a positive integer is found by summing the digits of the int ...
- Python系列之 迭代器和生成器
很多Python的程序员都会混淆 迭代器 和 生成器 的概念和作用,分不清到底两个有什么区别.今天我们来好好说一说这两个概念. 迭代器(Iterator) Iterator Pattern Itera ...
- c++拆分字符,不拆开中文
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h&g ...
- 20155218 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155218 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 实验结果截图: (二)使用IDEA编辑.编 ...
- 加分项——C语言实现Linux的pwd命令
加分项--C语言实现Linux的pwd命令 实现要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd pwd pw ...