Android 倒计时控件

/**Copyright(C)2012The*Project*Allrightreserved.*Version1.002012-2-11*Authorveally@foxmail.com*/packagecom.ly.sxh.view;importandroid.content.Context;importandroid.database.ContentObserver;importandroid.os.Handler;importandroid.os.SystemClock;importandroid.provider.Settings;importandroid.util.AttributeSet;importandroid.widget.DigitalClock;importjava.util.Calendar;/***Customdigitalclock*倒计时控件**@author*/publicclassCustomDigitalClockextendsDigitalClock{CalendarmCalendar;privatefinalstaticStringm12="h:mmaa";privatefinalstaticStringm24="k:mm";privateFormatChangeObservermFormatChangeObserver;privateRunnablemTicker;privateHandlermHandler;privatelongendTime;privateClockListenermClockListener;privatebooleanmTickerStopped=false;@SuppressWarnings("unused")privateStringmFormat;publicCustomDigitalClock(Contextcontext){super(context);initClock(context);}publicCustomDigitalClock(Contextcontext,AttributeSetattrs){super(context,attrs);initClock(context);}privatevoidinitClock(Contextcontext){if(mCalendar==null){mCalendar=Calendar.getInstance();}mFormatChangeObserver=newFormatChangeObserver();getContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI,true,mFormatChangeObserver);setFormat();}@OverrideprotectedvoidonAttachedToWindow(){mTickerStopped=false;super.onAttachedToWindow();mHandler=newHandler();/***requestsatickonthenexthard-secondboundary*/mTicker=newRunnable(){publicvoidrun(){if(mTickerStopped)return;longcurrentTime=System.currentTimeMillis();if(currentTime/1000==endTime/1000-5*60){mClockListener.remainFiveMinutes();}longdistanceTime=endTime-currentTime;distanceTime/=1000;if(distanceTime==0){setText("00:00:00");onDetachedFromWindow();mClockListener.timeEnd();}elseif(distanceTime<0){setText("00:00:00");}else{setText(dealTime(distanceTime));}invalidate();longnow=SystemClock.uptimeMillis();longnext=now+(1000-now%1000);mHandler.postAtTime(mTicker,next);}};mTicker.run();}/***dealtimestring**@paramtime*@return*/publicstaticStringdealTime(longtime){StringBufferreturnString=newStringBuffer();longday=time/(24*60*60);longhours=(time%(24*60*60))/(60*60);longminutes=((time%(24*60*60))%(60*60))/60;longsecond=((time%(24*60*60))%(60*60))%60;StringdayStr=String.valueOf(day);StringhoursStr=timeStrFormat(String.valueOf(hours));StringminutesStr=timeStrFormat(String.valueOf(minutes));StringsecondStr=timeStrFormat(String.valueOf(second));returnString.append(hoursStr).append(":").append(minutesStr).append(":").append(secondStr);returnreturnString.toString();}/***formattime**@paramtimeStr*@return*/privatestaticStringtimeStrFormat(StringtimeStr){switch(timeStr.length()){case1:timeStr="0"+timeStr;break;}returntimeStr;}@OverrideprotectedvoidonDetachedFromWindow(){super.onDetachedFromWindow();mTickerStopped=true;}/***Clockendtimefromnowon.**@paramendTime*/publicvoidsetEndTime(longendTime){this.endTime=endTime;}/***Pulls12/24modefromsystemsettings*/privatebooleanget24HourMode(){returnandroid.text.format.DateFormat.is24HourFormat(getContext());}privatevoidsetFormat(){if(get24HourMode()){mFormat=m24;}else{mFormat=m12;}}privateclassFormatChangeObserverextendsContentObserver{publicFormatChangeObserver(){super(newHandler());}@OverridepublicvoidonChange(booleanselfChange){setFormat();}}publicvoidsetClockListener(ClockListenerclockListener){this.mClockListener=clockListener;}publicinterfaceClockListener{voidtimeEnd();voidremainFiveMinutes();}}


更多相关文章

  1. 三、安卓UI学习(1)
  2. android用户界面之按钮(Button)教程实例汇
  3. 在Fragment中设置控件点击方法,执行失败。
  4. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  5. Android常用控件
  6. android用户界面-组件Widget-画廊视图Gallery
  7. 总目录
  8. android 单元测试
  9. android 布局式跑马灯,非TextView

随机推荐

  1. C#中DataSet的用法
  2. c语言注释符号是什么?
  3. c语言字符串定义的方法是什么
  4. c语言除法如何运算
  5. c语言二进制输出的方法
  6. c语言简单小游戏-扫雷游戏
  7. c语言程序的调试方法
  8. c语言求x的n次方的函数是什么
  9. c语言中合法的字符常量如何定义?
  10. c语言逗号表达式的运算规则