Android实现的秒表计时器示例

本文实例讲述了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调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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

时间: 2024-10-12 21:13:56

Android实现的秒表计时器示例的相关文章

Android实现的秒表计时器示例_Android

本文实例讲述了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; imp

图片-Android中 界面加入计时器 来回切换的过程中 数字跳转的速度越来越快 求解决

问题描述 Android中 界面加入计时器 来回切换的过程中 数字跳转的速度越来越快 求解决 Fragment + ViewPager 切换中 求解决 是他一起在生成新的 让handler多次执行吗 要加判断还是怎么写 求大神帮忙 解决方案 handler 没出完整 我觉得是计时器写法问题啊 他一直在生成新的 要加判断吗 还是 写try catch? 解决方案二: 我没有写过安卓,但根据经验,计时器越来越快的一个原因可能是刷新的时候,前一个计时器没有清空 解决方案三: 多个timer在发送msg

Android编程之SurfaceView学习示例详解_Android

本文实例讲述了Android编程之SurfaceView学习示例.分享给大家供大家参考,具体如下: SurfaceView是View的子类,使用的方式与任何View所派生的类都是完全相同的,可以像其他View那样应用动画,并把它们放到布局中. SurfaceView封装的Surface支持使用本章前面所描述的所有标准Canvas方法进行绘图,同时也支持完全的OpenGL ES库. 使用OpenGL,你可以再Surface上绘制任何支持的2D或者3D对象,与在2D画布上模拟相同的效果相比,这种方法

Android中CountDownTimer倒计时器用法实例_Android

本文实例讲述了Android中CountDownTimer倒计时器用法.分享给大家供大家参考,具体如下: 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了一个类,往往都自己写.现在发现了这个类,大家共享一下: 在一个TextView不断显示剩下的时间,代码如下: private TextView vertifyView; private CountDownTimer timer = new CountDownTimer(10000, 1000) { @Ov

Android编程之简单计时器实现方法_Android

本文实例讲述了Android编程之简单计时器实现方法.分享给大家供大家参考,具体如下: 这里利用ContextMenu(上下文菜单),Chronometer实现简单计数器. Main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android

Android清理设备内存详细完整示例(二)

MainActivity如下: package cc.c; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.MemoryInfo;

求大神帮忙做个秒表计时器

问题描述 本人刚刚接触软件开发,很多都不懂.求位大神耐心指导.谢谢 解决方案 解决方案二:放一个定时器两个按钮一个Label定时器设置inerval=100在窗体中定义一个变量privateDateTimedt;一个按钮叫开始里面写:dt=DateTime.Now;timer1.Start();一个按钮叫停止timer1.Stop();在Timer1的Tick里面写:label1.Text=newTimeSpan(DateTime.Now.Tick-dt.Tick).ToString();解决方

javascript设计简单的秒表计时器_javascript技巧

本文实例讲述了javascript设计简单的秒表计时器的实现代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: <html> <head> <title> New Document </title> </head> <body> <form action="somepage.asp"> <input type="text" value="0&q

Android中CountDownTimer倒计时器用法实例

本文实例讲述了Android中CountDownTimer倒计时器用法.分享给大家供大家参考,具体如下: 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了一个类,往往都自己写.现在发现了这个类,大家共享一下: 在一个TextView不断显示剩下的时间,代码如下: private TextView vertifyView; private CountDownTimer timer = new CountDownTimer(10000, 1000) { @Ov