Android实现的秒表计时器示例
本文实例讲述了Android实现的秒表计时器。分享给大家供大家参考,具体如下:
packagecom.liu.time; importjava.util.Timer; importjava.util.TimerTask; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.content.Context; importandroid.content.DialogInterface; importandroid.content.SharedPreferences; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.util.Log; importandroid.view.KeyEvent; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.widget.ImageButton; importandroid.widget.TextView; publicclassMyTimeextendsActivity{ privatelongmlCount=0; privatelongmlTimerUnit=100; privateTextViewtvTime; privateImageButtonbtnStartPause; privateImageButtonbtnStop; privateTimertimer=null; privateTimerTasktask=null; privateHandlerhandler=null; privateMessagemsg=null; privatebooleanbIsRunningFlg=false; privatestaticfinalStringMYTIMER_TAG="MYTIMER_LOG"; //menuitem privatestaticfinalintSETTING_TIMER_UNIT_ID=Menu.FIRST; privatestaticfinalintABOUT_ID=Menu.FIRST+1; privatestaticfinalintEXIT_ID=Menu.FIRST+2; privatestaticfinalintSETTING_SECOND_ID=Menu.FIRST+101; privatestaticfinalintSETTING_100MILLISECOND_ID=Menu.FIRST+102; //Settingtimerunitflag privateintsettingTimerUnitFlg=SETTING_100MILLISECOND_ID; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ 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); SharedPreferencessharedPreferences=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); }elseif(100==mlTimerUnit){ //100millisecond settingTimerUnitFlg=SETTING_100MILLISECOND_ID; tvTime.setText(R.string.init_time_100millisecond); } //Handletimermessage handler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ //TODOAuto-generatedmethodstub switch(msg.what){ case1: mlCount++; inttotalSec=0; intyushu=0; if(SETTING_SECOND_ID==settingTimerUnitFlg){ //second totalSec=(int)(mlCount); }elseif(SETTING_100MILLISECOND_ID==settingTimerUnitFlg){ //100millisecond totalSec=(int)(mlCount/10); yushu=(int)(mlCount%10); } //Settimedisplay intmin=(totalSec/60); intsec=(totalSec%60); try{ if(SETTING_SECOND_ID==settingTimerUnitFlg){ //second(1000ms) tvTime.setText(String.format("%1$02d:%2$02d",min, sec)); }elseif(SETTING_100MILLISECOND_ID==settingTimerUnitFlg){ //100millisecond tvTime.setText(String.format("%1$02d:%2$02d:%3$d", min,sec,yushu)); } }catch(Exceptione){ tvTime.setText(""+min+":"+sec+":"+yushu); e.printStackTrace(); Log.e("MyTimeronCreate","Formatstringerror."); } break; default: break; } super.handleMessage(msg); } }; btnStartPause.setOnClickListener(startPauseListener); btnStop.setOnClickListener(stopListener); } //Startandpause View.OnClickListenerstartPauseListener=newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub Log.i(MYTIMER_TAG,"Start/Pauseisclicked."); if(null==timer){ if(null==task){ task=newTimerTask(){ @Override publicvoidrun(){ //TODOAuto-generatedmethodstub if(null==msg){ msg=newMessage(); }else{ msg=Message.obtain(); } msg.what=1; handler.sendMessage(msg); } }; } timer=newTimer(true); timer.schedule(task,mlTimerUnit,mlTimerUnit);//settimer //duration } //start if(!bIsRunningFlg){ bIsRunningFlg=true; //btnStartPause.setImageResource(R.drawable.pause); }else{//pause try{ bIsRunningFlg=false; task.cancel(); task=null; timer.cancel();//Canceltimer timer.purge(); timer=null; handler.removeMessages(msg.what); //btnStartPause.setImageResource(R.drawable.start); }catch(Exceptione){ e.printStackTrace(); } } } }; //Stop View.OnClickListenerstopListener=newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub Log.i(MYTIMER_TAG,"Stopisclicked."); if(null!=timer){ task.cancel(); task=null; timer.cancel();//Canceltimer 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); }elseif(SETTING_100MILLISECOND_ID==settingTimerUnitFlg){ //100millisecond tvTime.setText(R.string.init_time_100millisecond); } } }; //Menu @Override publicbooleanonCreateOptionsMenu(android.view.Menumenu){ //TODOAuto-generatedmethodstub super.onCreateOptionsMenu(menu); Log.i(MYTIMER_TAG,"Menuiscreated."); //Stoptimer if(null!=task){ task.cancel(); task=null; } if(null!=timer){ timer.cancel();//Canceltimer timer.purge(); timer=null; handler.removeMessages(msg.what); } bIsRunningFlg=false; mlCount=0; //btnStartPause.setImageResource(R.drawable.start); //设置子菜单的名称 //SubMenusettingMenu=menu.addSubMenu(0,SETTING_TIMER_UNIT_ID,0, //R.string.menu_setting_timer_unit).setIcon(R.drawable.setting); //按对应的名称增加子菜单 //Submenusdonotsupportitemicons,ornestedsubmenus. //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); returntrue; } //Menuitem @Override publicbooleanonOptionsItemSelected(MenuItemitem){ //TODOAuto-generatedmethodstub Log.i(MYTIMER_TAG,"Menuitemisselected."); switch(item.getItemId()){ caseSETTING_TIMER_UNIT_ID: break; caseABOUT_ID: //Displayaboutdialog AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setTitle(R.string.app_name) .setMessage("本程序由雨梦开发/n联系作者:minyugong@163.com") .setCancelable(true) .setPositiveButton("确定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ dialog.cancel(); } }); AlertDialogalert=builder.create(); alert.show(); break; caseEXIT_ID: finish();//Exitapplication break; caseSETTING_SECOND_ID://秒(1000ms) if(SETTING_SECOND_ID!=settingTimerUnitFlg){ mlTimerUnit=1000; settingTimerUnitFlg=SETTING_SECOND_ID; } tvTime.setText(R.string.init_time_second); break; caseSETTING_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,"Othermenuitem..."); break; } //Savetimerunit try{ SharedPreferencessharedPreferences=getSharedPreferences( "mytimer_unit",Context.MODE_PRIVATE); SharedPreferences.Editoreditor=sharedPreferences.edit();//获取编辑器 editor.putLong("time_unit",mlTimerUnit); editor.commit();//提交修改 }catch(Exceptione){ e.printStackTrace(); Log.e(MYTIMER_TAG,"savetimeruniterror."); } returnsuper.onOptionsItemSelected(item); } @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ //TODOAuto-generatedmethodstub if(KeyEvent.KEYCODE_MENU==keyCode){ super.openOptionsMenu();//调用这个,就可以弹出菜单 Log.i(MYTIMER_TAG,"Menukeyisclicked."); //Stoptimer if(null!=task){ task.cancel(); task=null; } if(null!=timer){ timer.cancel();//Canceltimer timer.purge(); timer=null; handler.removeMessages(msg.what); } bIsRunningFlg=false; mlCount=0; //btnStartPause.setImageResource(R.drawable.start); returntrue; } returnsuper.onKeyDown(keyCode,event); } }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android日期与时间操作技巧总结》、《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。