栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android实现的秒表计时器示例

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
  
  @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程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/161806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号