本文实例讲述了Android实现的秒表计时器。分享给大家供大家参考,具体如下:

package com.liu.time;

import java.util.Timer;

import java.util.TimerTask;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.KeyEvent;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.ImageButton;

import android.widget.TextView;

public class MyTime extends Activity {

private long mlCount = 0;

private long mlTimerUnit = 100;

private TextView tvTime;

private ImageButton btnStartPause;

private ImageButton btnStop;

private Timer timer = null;

private TimerTask task = null;

private Handler handler = null;

private Message msg = null;

private boolean bIsRunningFlg = false;

private static final String MYTIMER_TAG = "MYTIMER_LOG";

// menu item

private static final int SETTING_TIMER_UNIT_ID = Menu.FIRST;

private static final int ABOUT_ID = Menu.FIRST + 1;

private static final int EXIT_ID = Menu.FIRST + 2;

private static final int SETTING_SECOND_ID = Menu.FIRST + 101;

private static final int SETTING_100MILLISECOND_ID = Menu.FIRST + 102;

// Setting timer unit flag

private int settingTimerUnitFlg = SETTING_100MILLISECOND_ID;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

tvTime = (TextView) findViewById(R.id.tvTime);

btnStartPause = (ImageButton) findViewById(R.id.btnStartPaunse);

btnStop = (ImageButton) findViewById(R.id.btnStop);

SharedPreferences sharedPreferences = getSharedPreferences(

"mytimer_unit", Context.MODE_PRIVATE);

// getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值

mlTimerUnit = sharedPreferences.getLong("time_unit", 100);

Log.i(MYTIMER_TAG, "mlTimerUnit = " + mlTimerUnit);

if (1000 == mlTimerUnit) {

// second

settingTimerUnitFlg = SETTING_SECOND_ID;

tvTime.setText(R.string.init_time_second);

} else if (100 == mlTimerUnit) {

// 100 millisecond

settingTimerUnitFlg = SETTING_100MILLISECOND_ID;

tvTime.setText(R.string.init_time_100millisecond);

}

// Handle timer message

handler = new Handler() {

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

switch (msg.what) {

case 1:

mlCount++;

int totalSec = 0;

int yushu = 0;

if (SETTING_SECOND_ID == settingTimerUnitFlg) {

// second

totalSec = (int) (mlCount);

} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {

// 100 millisecond

totalSec = (int) (mlCount / 10);

yushu = (int) (mlCount % 10);

}

// Set time display

int min = (totalSec / 60);

int sec = (totalSec % 60);

try {

if (SETTING_SECOND_ID == settingTimerUnitFlg) {

// second(1000ms)

tvTime.setText(String.format("%1$02d:%2$02d", min,

sec));

} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {

// 100 millisecond

tvTime.setText(String.format("%1$02d:%2$02d:%3$d",

min, sec, yushu));

}

} catch (Exception e) {

tvTime.setText("" + min + ":" + sec + ":" + yushu);

e.printStackTrace();

Log.e("MyTimer onCreate", "Format string error.");

}

break;

default:

break;

}

super.handleMessage(msg);

}

};

btnStartPause.setOnClickListener(startPauseListener);

btnStop.setOnClickListener(stopListener);

}

// Start and pause

View.OnClickListener startPauseListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i(MYTIMER_TAG, "Start/Pause is clicked.");

if (null == timer) {

if (null == task) {

task = new TimerTask() {

@Override

public void run() {

// TODO Auto-generated method stub

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); // set timer

// duration

}

// start

if (!bIsRunningFlg) {

bIsRunningFlg = true;

// btnStartPause.setImageResource(R.drawable.pause);

} else { // pause

try {

bIsRunningFlg = false;

task.cancel();

task = null;

timer.cancel(); // Cancel timer

timer.purge();

timer = null;

handler.removeMessages(msg.what);

// btnStartPause.setImageResource(R.drawable.start);

} catch (Exception e) {

e.printStackTrace();

}

}

}

};

// Stop

View.OnClickListener stopListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i(MYTIMER_TAG, "Stop is clicked.");

if (null != timer) {

task.cancel();

task = null;

timer.cancel(); // Cancel timer

timer.purge();

timer = null;

handler.removeMessages(msg.what);

}

mlCount = 0;

bIsRunningFlg = false;

// btnStartPause.setImageResource(R.drawable.start);

if (SETTING_SECOND_ID == settingTimerUnitFlg) {

// second

tvTime.setText(R.string.init_time_second);

} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {

// 100 millisecond

tvTime.setText(R.string.init_time_100millisecond);

}

}

};

// Menu

@Override

public boolean onCreateOptionsMenu(android.view.Menu menu) {

// TODO Auto-generated method stub

super.onCreateOptionsMenu(menu);

Log.i(MYTIMER_TAG, "Menu is created.");

// Stop timer

if (null != task) {

task.cancel();

task = null;

}

if (null != timer) {

timer.cancel(); // Cancel timer

timer.purge();

timer = null;

handler.removeMessages(msg.what);

}

bIsRunningFlg = false;

mlCount = 0;

// btnStartPause.setImageResource(R.drawable.start);

// 设置子菜单的名称

// SubMenu settingMenu = menu.addSubMenu(0, SETTING_TIMER_UNIT_ID, 0,

// R.string.menu_setting_timer_unit).setIcon(R.drawable.setting);

// 按对应的名称增加子菜单

// Sub menus do not support item icons, or nested sub menus.

// settingMenu.add(1, SETTING_SECOND_ID, 0,

// R.string.menu_setting_second);

// settingMenu.add(1, SETTING_100MILLISECOND_ID, 1,

// R.string.menu_setting_100milisec);

// About

// menu.add(0, ABOUT_ID, 1,

// R.string.menu_about).setIcon(R.drawable.about);

// 退出

// menu.add(0, EXIT_ID, 2, R.string.menu_exit).setIcon(R.drawable.exit);

return true;

}

// Menu item

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

Log.i(MYTIMER_TAG, "Menu item is selected.");

switch (item.getItemId()) {

case SETTING_TIMER_UNIT_ID:

break;

case ABOUT_ID:

// Display about dialog

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle(R.string.app_name)

.setMessage("本程序由雨梦开发/n联系作者:minyugong@163.com")

.setCancelable(true)

.setPositiveButton("确定", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

dialog.cancel();

}

});

AlertDialog alert = builder.create();

alert.show();

break;

case EXIT_ID:

finish(); // Exit application

break;

case SETTING_SECOND_ID: // 秒(1000ms)

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:

Log.i(MYTIMER_TAG, "Other menu item...");

break;

}

// Save timer unit

try {

SharedPreferences sharedPreferences = getSharedPreferences(

"mytimer_unit", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = sharedPreferences.edit();// 获取编辑器

editor.putLong("time_unit", mlTimerUnit);

editor.commit();// 提交修改

} catch (Exception e) {

e.printStackTrace();

Log.e(MYTIMER_TAG, "save timer unit error.");

}

return super.onOptionsItemSelected(item);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

if (KeyEvent.KEYCODE_MENU == keyCode) {

super.openOptionsMenu(); // 调用这个,就可以弹出菜单

Log.i(MYTIMER_TAG, "Menu key is clicked.");

// Stop timer

if (null != task) {

task.cancel();

task = null;

}

if (null != timer) {

timer.cancel(); // Cancel timer

timer.purge();

timer = null;

handler.removeMessages(msg.what);

}

bIsRunningFlg = false;

mlCount = 0;

// btnStartPause.setImageResource(R.drawable.start);

return true;

}

return super.onKeyDown(keyCode, event);

}

}

希望本文所述对大家Android程序设计有所帮助。

android自定义秒表,Android实现的秒表计时器示例相关推荐

  1. android 自定义loading,Android自定义动画-StarLoadingView

    今天来分享第二个自定义loading的动画,起了个名字叫 蹦跶的星星 ,还是老规矩先介绍,后上图. 实现效果在最后,GIF有点大,手机流量慎重. 介绍 首先声明做这个动画的初衷是为了学习和分享,所以从 ...

  2. android 自定义命名空间,Android自定义ActionBar实例

    本文实例讲述了android自定义actionbar的实现方法.分享给大家供大家参考.具体实现方法如下: android 3.0及以上已经有了actionbar的api,可以通过引入support p ...

  3. android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定

    概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...

  4. android 自定义event,Android运用onTouchEvent自定义滑动布局

    写在自定义之前 我们也许会遇到,自定义控件的触屏事件处理,先来了解一下View类中的,onTouch事件和onTouchEvent事件. 1.boolean onTouch(View v, Motio ...

  5. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  6. android自定义抽奖,Android自定义view制作抽奖转盘

    本文实例为大家分享了Android自定义view制作抽奖转盘的具体代码,供大家参考,具体内容如下 效果图 TurntableActivity package com.bawei.myapplicati ...

  7. android 自定义banner,Android项目 引入Banner开源库(轮播图)

    Banner开源库是什么? Banner 是 Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义. 怎么使用 Banner 开源库? 1.在项目\a ...

  8. android 自定义 child,Android自定义View

    前言 Android自定义View的详细步骤是我们每一个Android开发人员都必须掌握的技能,因为在开发中总会遇到自定义View的需求.为了提高自己的技术水平,自己就系统的去研究了一下,在这里写下一 ...

  9. android 自定义flowlayout,Android 自定义ViewGroup之实现FlowLayout-标签流容器

    本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout ...

  10. android 自定义text,android – 使用自定义textSize实现自定义TextView

    我已经实现了自定义TextView,然后我需要更改其文本大小以供将来使用.在那一步,我决定使用style.xml和attr.xml进行textSize自定义 但是,当我的自定义布局膨胀时,我收到运行时 ...

最新文章

  1. 几何画板自定义工具_用好神奇的数学工具--几何画板,轻松作出复杂的几何图形...
  2. 哪个线程执行CompletableFuture的任务和回调?
  3. 经典排序算法 - 堆排序Heap sort
  4. springcloud 实现反向代理和负载均衡
  5. Spring boot(6)---在Eclipse中搭建Spring boot 项目
  6. 深入Hadoop磁盘部署的算法
  7. Nginx 限制并发连接数。
  8. 哪些话你一开始不信,后来却深信不疑
  9. 【ENVI预处理】辐射校正、影像配准、图像融合、图像镶嵌 、图像裁剪、图像增强
  10. Lambert 投影转换相关代码
  11. 计算机软考网络工程师英语,计算机软考网络工程师必备英语词汇全集
  12. scrapy持久化存储
  13. php storm netbean,的Android R.drawable找不到符号...(使用netbean)
  14. it职位简称_IT行业常见职位英文缩写
  15. DEL计算机英语翻译,哥德尔计算机,G·del computer,音标,读音,翻译,英文例句,英语词典...
  16. 联合概率密度函数的基本结论
  17. 解决Win10无法安装.Net Framework 3.5,错误代码0x800F081F
  18. 关于同比和环比的几个问题
  19. 补丁31305087
  20. 展讯7731C_M Android6.0 充电指示灯实现(一)------关机充电实现

热门文章

  1. Ubuntu离线安装网卡驱动
  2. 在EXCEL中如何设置打印区域,只打印部分区域
  3. Golang如何实现排序
  4. 【并发编程一:走进并发编程】
  5. kubernet安装helm
  6. Cisco Nexus 7000
  7. CentOS7配置supervisor开机自启[队列监听,Horizon服务启动]
  8. html5对电脑配置要求,bim软件对电脑配置要求高吗
  9. arduino wifi_Arduino MKR WiFi 1010
  10. 图片裁剪cropperjs的使用