当前位置: 移动技术网 > 移动技术>移动开发>Android > Android实现的秒表计时器示例

Android实现的秒表计时器示例

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网