2012年4月25日 星期三

[Android]MinutesToMidnight - 倒數計時至午夜 00:00:00



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>

沒有留言:

張貼留言