Welcome

首页 / 移动开发 / 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;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 itemprivate 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 flagprivate int settingTimerUnitFlg = SETTING_100MILLISECOND_ID;/** Called when the activity is first created. */@Overridepublic 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) {// secondsettingTimerUnitFlg = SETTING_SECOND_ID;tvTime.setText(R.string.init_time_second);} else if (100 == mlTimerUnit) {// 100 millisecondsettingTimerUnitFlg = SETTING_100MILLISECOND_ID;tvTime.setText(R.string.init_time_100millisecond);}// Handle timer messagehandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {case 1:mlCount++;int totalSec = 0;int yushu = 0;if (SETTING_SECOND_ID == settingTimerUnitFlg) {// secondtotalSec = (int) (mlCount);} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {// 100 millisecondtotalSec = (int) (mlCount / 10);yushu = (int) (mlCount % 10);}// Set time displayint 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 millisecondtvTime.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 pauseView.OnClickListener startPauseListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLog.i(MYTIMER_TAG, "Start/Pause is clicked.");if (null == timer) {if (null == task) {task = new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubif (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}// startif (!bIsRunningFlg) {bIsRunningFlg = true;// btnStartPause.setImageResource(R.drawable.pause);} else { // pausetry {bIsRunningFlg = false;task.cancel();task = null;timer.cancel(); // Cancel timertimer.purge();timer = null;handler.removeMessages(msg.what);// btnStartPause.setImageResource(R.drawable.start);} catch (Exception e) {e.printStackTrace();}}}};// StopView.OnClickListener stopListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLog.i(MYTIMER_TAG, "Stop is clicked.");if (null != timer) {task.cancel();task = null;timer.cancel(); // Cancel timertimer.purge();timer = null;handler.removeMessages(msg.what);}mlCount = 0;bIsRunningFlg = false;// btnStartPause.setImageResource(R.drawable.start);if (SETTING_SECOND_ID == settingTimerUnitFlg) {// secondtvTime.setText(R.string.init_time_second);} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {// 100 millisecondtvTime.setText(R.string.init_time_100millisecond);}}};// Menu@Overridepublic boolean onCreateOptionsMenu(android.view.Menu menu) {// TODO Auto-generated method stubsuper.onCreateOptionsMenu(menu);Log.i(MYTIMER_TAG, "Menu is created.");// Stop timerif (null != task) {task.cancel();task = null;}if (null != timer) {timer.cancel(); // Cancel timertimer.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@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubLog.i(MYTIMER_TAG, "Menu item is selected.");switch (item.getItemId()) {case SETTING_TIMER_UNIT_ID:break;case ABOUT_ID:// Display about dialogAlertDialog.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 applicationbreak;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 unittry {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);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (KeyEvent.KEYCODE_MENU == keyCode) {super.openOptionsMenu(); // 调用这个,就可以弹出菜单Log.i(MYTIMER_TAG, "Menu key is clicked.");// Stop timerif (null != task) {task.cancel();task = null;}if (null != timer) {timer.cancel(); // Cancel timertimer.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程序设计有所帮助。