Android(安卓)倒计时控件
16lz
2022-07-23
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();}}
更多相关文章
- 三、安卓UI学习(1)
- android用户界面之按钮(Button)教程实例汇
- 在Fragment中设置控件点击方法,执行失败。
- TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
- Android常用控件
- android用户界面-组件Widget-画廊视图Gallery
- 总目录
- android 单元测试
- android 布局式跑马灯,非TextView