Android實現的秒錶計時器樣本_Android

來源:互聯網
上載者:User

本文執行個體講述了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程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.