1. 程式人生 > >Android 搶購類倒計時實現 (包括天數,小時,分鐘,秒)

Android 搶購類倒計時實現 (包括天數,小時,分鐘,秒)

Android 搶購類倒計時實現,本文注重實現功能,程式碼裡有註釋,實現起來比較簡單,所有不做過多解釋。

先上圖:


實現倒計時可採用Message + Handler 來實現,具體實現如下:

MainActivity的程式碼如下:

package com.example.android_countdown;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 搶購倒計時
 * 
 * @author shihao
 * 
 */
public class MainActivity extends Activity {

	private RelativeLayout countDown;
	// 倒計時
	private TextView daysTv, hoursTv, minutesTv, secondsTv;
	private long mDay = 10;
	private long mHour = 10;
	private long mMin = 30;
	private long mSecond = 00;// 天 ,小時,分鐘,秒
	private boolean isRun = true;
	private Handler timeHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if (msg.what==1) {
				computeTime();
				daysTv.setText(mDay+"");
				hoursTv.setText(mHour+"");
				minutesTv.setText(mMin+"");
				secondsTv.setText(mSecond+"");
				if (mDay==0&&mHour==0&&mMin==0&&mSecond==0) {
					countDown.setVisibility(View.GONE);
				}
			}
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		countDown = (RelativeLayout) findViewById(R.id.countdown_layout);
		daysTv = (TextView) findViewById(R.id.days_tv);
		hoursTv = (TextView) findViewById(R.id.hours_tv);
		minutesTv = (TextView) findViewById(R.id.minutes_tv);
		secondsTv = (TextView) findViewById(R.id.seconds_tv);

		startRun();				
	}
	
	/**
	 * 開啟倒計時 
	 */
	private void startRun() {
		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				while (isRun) {
					try {
						Thread.sleep(1000); // sleep 1000ms
						Message message = Message.obtain();
						message.what = 1;
						timeHandler.sendMessage(message);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}

	/**
	 * 倒計時計算
	 */
	private void computeTime() {
		mSecond--;
		if (mSecond < 0) {
			mMin--;
			mSecond = 59;
			if (mMin < 0) {
				mMin = 59;
				mHour--;
				if (mHour < 0) {
					// 倒計時結束
					mHour = 23;
					mDay--;
				}
			}
		}
	}
}

activity_main.xml程式碼如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/countdown_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:gravity="center" >

    <RelativeLayout
        android:id="@+id/daojishi_rl"
        android:layout_width="match_parent"
        android:layout_height="40.0dip"
        android:layout_marginLeft="10.0dip"
        android:layout_marginRight="10.0dip"
        android:gravity="center" >

        <ImageView
            android:id="@+id/describe_iv"
            android:layout_width="40.0dip"
            android:layout_height="40.0dip"
            android:background="@drawable/daojishi"
            android:gravity="center_vertical" />

        <TextView
            android:id="@+id/describe_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginRight="5.0dip"
            android:layout_toRightOf="@+id/describe_iv"
            android:text="距離開團還有 "
            android:textSize="25sp" />

        <TextView
            android:id="@+id/days_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/describe_tv"
            android:background="@drawable/daojishiframe"
            android:gravity="center"
            android:text="20"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/colon0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5.0dip"
            android:layout_marginRight="3.0dip"
            android:layout_toRightOf="@+id/days_tv"
            android:text="天"
            android:textSize="20sp"
            android:textStyle="bold" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/daojishi_rl"
        android:gravity="center_horizontal" >

        <TextView
            android:id="@+id/hours_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/colon1"
            android:background="@drawable/daojishiframe"
            android:gravity="center"
            android:text="23"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/colon1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="3.0dip"
            android:layout_marginRight="3.0dip"
            android:layout_toLeftOf="@+id/minutes_tv"
            android:text=":"
            android:textSize="20sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/minutes_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/colon2"
            android:background="@drawable/daojishiframe"
            android:gravity="center"
            android:text="59"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/colon2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="3.0dip"
            android:layout_marginRight="3.0dip"
            android:layout_toLeftOf="@+id/seconds_tv"
            android:text=":"
            android:textSize="20sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/seconds_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@drawable/daojishiframe"
            android:gravity="center"
            android:text="59"
            android:textSize="20sp" />
    </RelativeLayout>

</RelativeLayout>

專案下載地址:http://download.csdn.net/detail/shr957250701/8172137