![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2t2LRTZzOYYQqH4DUM46mypL8a7BbG42A6wSxKtME-VqtsUH5j2Utq3bV2HL1SuyMLgL7wQXYMKmulpcJauDrdrq2nmY_wEAgxj0-pKnbg7zRtp9fdmh5MiC_dbmNgx0uXkK3T2F-Pb9z/s400/device-2012-04-25-235029.png)
Related Link : http://bakhtiyor.com/2009/06/minutes-to-midnight/
<MinutesToMidnight.java>
1: package com.android.minutestomidnight;
2:
3: import java.util.Calendar;
4: import java.util.Timer;
5: import java.util.TimerTask;
6:
7: import android.app.Activity;
8: import android.graphics.Typeface;
9: import android.os.Bundle;
10: import android.view.View;
11: import android.view.View.OnClickListener;
12: import android.widget.Button;
13: import android.widget.TextView;
14:
15: public class MinutesToMidnight extends Activity {
16:
17: private TextView countdown, base;
18: private Button btnExit;
19: private Timer timer;
20: private Typeface font;
21: private Calendar calendar;
22: private int msecDelay;
23:
24:
25: @Override
26: public void onCreate(Bundle savedInstanceState) {
27: super.onCreate(savedInstanceState);
28: setContentView(R.layout.main);
29: findViews();
30: setResultTypeFace();
31: setButtonListener();
32: }
33:
34:
35: @Override
36: protected void onStart() {
37: // onStart 時, 設定 MyTimerTask
38: super.onStart();
39: submitMyTimerTask();
40: }
41:
42:
43:
44: @Override
45: protected void onStop() {
46: // onStop 時,執行 timer.cancel() 及 timer.purge()
47: super.onStop();
48: timer.cancel();
49: timer.purge();
50: timer = null;
51: android.os.Process.killProcess(android.os.Process.myPid());
52: }
53:
54:
55: private void findViews() {
56: countdown = (TextView) findViewById(R.id.countdown);
57: base = (TextView) findViewById(R.id.base);
58: btnExit = (Button) findViewById(R.id.exitBtn);
59: }
60:
61:
62: private void setResultTypeFace() {
63: // 設用輸出文字的字型 TypeFace
64: // http://www.dailyfreefonts.com/fonts/info/4774-Digital-7-Mono.html
65: font = Typeface.createFromAsset(this.getAssets(), "fonts/digital-7 (mono).ttf");
66: countdown.setTypeface(font);
67: base.setTypeface(font);
68: }
69:
70:
71: private void setButtonListener(){
72: // 設定 ButtonListener
73: btnExit.setOnClickListener(new OnClickListener(){
74: public void onClick(View v) {
75: timer.cancel();
76: timer.purge();
77: android.os.Process.killProcess(android.os.Process.myPid());
78: }
79: });
80: }
81:
82:
83: private void submitMyTimerTask() {
84: // 設定 MyTimerTask
85: // 讀取系統時間
86: calendar = Calendar.getInstance();
87: // 計算 Delay Time
88: msecDelay = 999 - calendar.get(Calendar.MILLISECOND);
89: // 啟動 timer.scheduleAtFixedRate, 等待 msecDelay 時間後, 每隔 1000 毫秒執行一次 myTimerTask
90: timer = new Timer("");
91: timer.scheduleAtFixedRate(new TimerTask() {
92: @Override
93: public void run() {
94: runOnUiThread(MyTimerTask);
95: }},
96: msecDelay,
97: 1000);
98: }
99:
100:
101: final Runnable MyTimerTask = new Runnable() {
102: public void run() {
103: countdown.setText(getCountdownString());
104: }
105: };
106:
107:
108:
109: private String getCountdownString() {
110: // 計算至午夜 00:00:00 的倒數時間
111: calendar = Calendar.getInstance();
112: int hour = 23 - calendar.get(Calendar.HOUR_OF_DAY);
113: int minute = 59 - calendar.get(Calendar.MINUTE);
114: int second = 59 - calendar.get(Calendar.SECOND);
115: return String.format("%02d:%02d:%02d", hour, minute, second);
116: }
117: }
<main.xml>
1: <?xml version="1.0" encoding="utf-8"?>
2: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3: android:orientation="vertical" android:layout_width="fill_parent"
4: android:layout_height="fill_parent">
5:
6: <TextView
7: android:id="@+id/base"
8: android:layout_width="320dip"
9: android:layout_height="120dip"
10: android:layout_centerInParent="true"
11: android:background="@drawable/bg"
12: android:gravity="center"
13: android:text="@string/str888888"
14: android:textColor="#336699"
15: android:textSize="32pt"
16: android:typeface="monospace" />
17:
18:
19: <TextView
20: android:id="@+id/countdown"
21: android:layout_width="320dip"
22: android:layout_height="120dip"
23: android:layout_centerInParent="true"
24: android:gravity="center"
25: android:text="@string/str000000"
26: android:textColor="#00C2FF"
27: android:textSize="32pt"
28: android:typeface="monospace" />
29:
30: <View android:layout_width="320dip"
31: android:layout_height="120dip"
32: android:background="@drawable/top"
33: android:layout_centerInParent="true" />
34:
35:
36:
37: <Button
38: android:id="@+id/exitBtn"
39: android:layout_width="wrap_content"
40: android:layout_height="wrap_content"
41: android:layout_alignParentBottom="true"
42: android:layout_centerHorizontal="true"
43: android:layout_marginBottom="65dp"
44: android:text="@string/strExit" />
45:
46: <TextView
47: android:id="@+id/textView1"
48: android:layout_width="wrap_content"
49: android:layout_height="wrap_content"
50: android:layout_above="@+id/base"
51: android:layout_centerHorizontal="true"
52: android:layout_marginBottom="76dp"
53: android:text="@string/strTitle"
54: android:textSize="24dp" />
55:
56: </RelativeLayout>
<strings.xml>
1: <?xml version="1.0" encoding="utf-8"?>
2: <resources>
3:
4: <string name="hello">Hello World, MinutesToMidnight!</string>
5: <string name="app_name">MinutesToMidnight</string>
6: <string name="str888888">88:88:88</string>
7: <string name="str000000">00:00:00</string>
8: <string name="strExit">離開</string>
9: <string name="strTitle">MinutesToMidnight</string>
10:
11: </resources>