Android自定義view實現數字時鐘

weixin_34148340發表於2017-11-22

最近在專案中遇到了一個需要實時更新時間的需求,並且用的地方還是挺多的,無奈做了一個簡單的view來時現這個數字時鐘。

首先看一下效果,比較簡單,就是顯示時分秒。


6372170-507411bb8628c691.png

實現思路比較簡單,利用handler的延時傳送來實現事件的實時更新。

1.因為現實的最終效果只是一個字元,所以就直接繼承TextView來實現時間的展示,程式碼如下


6372170-e60bcf00f212275d.png

在初始化的時候直接將當前物件最為最終的顯示物件,

2。因為最終顯示的是事件,我們要獲取當前的時間,


6372170-a491d68ad2349670.png

這裡我用的是Calendar來實現獲取當前的時間,當然獲取時間的方式有很多種,你都可以用,

3.獲取時間後,如果要實時的更新時間,則我們需要每秒都獲取一次時間,我們要開啟一個子執行緒,在子執行緒中做我們的實時操作,


6372170-a7fa9c0e51f524bd.png

在init方法中,我們先獲取當前的時間,然後再開啟一個子執行緒進行實時更新操作,

4.實時更新操作通過handler的延時傳送訊息來實現,


6372170-b203f5e8929283e1.png

我們可以看到通過post方法來傳送一個延時訊息,最後在handleMessage方法中做訊息的處理,然後再傳送訊息,這樣就實現了無限迴圈,進而實現時間的實時更新,

以上就是實現一個簡單的數字時間顯示器的程式碼,比較簡單,下面直接貼上程式碼,

public classCustomTimeViewextendsTextView{

private finalCustomTimeViewtextView;

privateStringtime;

privateTimeHandlermTimehandler=newTimeHandler();

publicCustomTimeView(Context context) {

this(context,null);

}

publicCustomTimeView(Context context,AttributeSet attrs) {

super(context,attrs);

this.textView=this;

init(context);

}

private voidinit(Context context) {

try{

//初始化textview顯示時間

updateClock();

//更新程式開始

newThread(newRunnable() {

@Override

public voidrun() {

mTimehandler.startScheduleUpdate();

}

}).start();

}catch(Exception e){

e.printStackTrace();

}

}

//更新Handler通過handler的延時傳送訊息來更新時間

private classTimeHandlerextendsHandler {

private booleanmStopped;

private voidpost(){

//每隔1秒傳送一次訊息

sendMessageDelayed(obtainMessage(0),1000);

}

@Override

public voidhandleMessage(Message msg) {

super.handleMessage(msg);

if(!mStopped){

updateClock();

//實現實時更新

post();

}

}

//開始更新

public voidstartScheduleUpdate(){

mStopped=false;

post();

}

//停止更新

public voidstopScheduleUpdate(){

mStopped=true;

removeMessages(0);

}

}

//返回當前的時間,並結束handler的資訊傳送

publicStringgetTime(){

//停止傳送訊息

mTimehandler.stopScheduleUpdate();

returntime;

}

private voidupdateClock() {

//獲取當前的時間

Calendar calendar= Calendar.getInstance();

inthour=calendar.get(Calendar.HOUR_OF_DAY);

intminute=calendar.get(Calendar.MINUTE);

intsecond=calendar.get(Calendar.SECOND);

String s="";

String m="";

String h="";

if(hour<10){

h="0"+hour;

}else{

h=hour+"";

}

if(minute<10){

m="0"+minute;

}else{

m=minute+"";

}

if(second<10){

s="0"+second;

}else{

s=second+"";

}

time=h+":"+m+":"+s;

textView.setText(time);

}

}

直接貼上以上程式碼就可以使用了。

相關文章