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