码迷,mamicode.com
首页 > 其他好文 > 详细

采用数字控件的倒计时

时间:2014-08-01 22:50:02      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:android   blog   http   java   os   io   art   cti   

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

	<LinearLayout 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:orientation="horizontal"
	    android:gravity="center_horizontal"
	    android:paddingLeft="3dp" >
	    
		<NumberPicker 
		android:id="@+id/np1"
	    android:layout_width="50dp"
	    android:layout_height="wrap_content"/>
			<TextView 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center_vertical|center_horizontal"
	    android:textSize="20sp"
	    android:text=":"/>
		<NumberPicker 
		android:id="@+id/np2"
	    android:layout_width="50dp"
	    android:layout_height="wrap_content"
	    android:layout_marginLeft="5dip"/>
		<TextView 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center_vertical|center_horizontal"
	    android:textSize="20sp"
	    android:text=":"/>
		<NumberPicker 
		android:id="@+id/np3"
	    android:layout_width="50dp"
	    android:layout_height="wrap_content"/>
	</LinearLayout>
	
		<TextView 
	    android:id="@+id/txt"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"/>
		   <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/showtiqian"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
		    
	 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开始倒计时" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止" />

        <TextView
            android:id="@+id/showcount"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

  

package com.example.activity;

import java.util.Calendar;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.NumberPicker;
import android.widget.NumberPicker.OnValueChangeListener;
import android.widget.TextView;
import com.example.test.R;

public class TimeCountActivity extends Activity
{
    private boolean STOP = true;
	private NumberPicker mSecondSpinner;
	private NumberPicker mHourSpinner;
	private NumberPicker mMinuteSpinner;
	private TextView timeCount;
	private Button btn_start ,btn1;
	private Calendar mDate;
	private int mHour, mMinute,mSecond;
	private Handler mHandler = new Handler();// 全局handler
	int time = 0;// 时间差
	
	
	@SuppressLint("NewApi")
	protected void onCreate(Bundle savedInstanceState)
	{
		setContentView(R.layout.timecount);
		super.onCreate(savedInstanceState);

		mDate = Calendar.getInstance();
		mHour = mDate.get(Calendar.HOUR_OF_DAY);
		mMinute = mDate.get(Calendar.MINUTE);
		mSecond = mDate.get(Calendar.SECOND);

		mHourSpinner = (NumberPicker) this.findViewById(R.id.np1);
		mHourSpinner.setMaxValue(23);
		mHourSpinner.setMinValue(0);
		mHourSpinner.setValue(mHour);
		mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);

		mMinuteSpinner = (NumberPicker) this.findViewById(R.id.np2);
		mMinuteSpinner.setMaxValue(59);
		mMinuteSpinner.setMinValue(0);
		mMinuteSpinner.setValue(mMinute);
		mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener);
		
		mSecondSpinner = (NumberPicker) this.findViewById(R.id.np3);
		mSecondSpinner.setMaxValue(59);
		mSecondSpinner.setMinValue(0);
		mSecondSpinner.setValue(mSecond);
		mSecondSpinner.setOnValueChangedListener(mOnDateChangedListener);
		
		timeCount = (TextView) this.findViewById(R.id.showcount);
		
		btn_start = (Button) this.findViewById(R.id.btn_start);
		btn_start.setOnClickListener(new mClick());
		
		btn1 = (Button) this.findViewById(R.id.button1);
		btn1.setOnClickListener(new mClick());

	}
	
	class mClick implements OnClickListener
	{
		public void onClick(View v)
		{
			if(v == btn_start)
			{
				STOP = false;
				  time = mSecond + mMinute*60 + mHour*3600;
				  new Thread(new TimeCount()).start();// 开启线程
			}
			else if(v == btn1)
			{
				STOP = true;
			}
		}
	}

	@SuppressLint("NewApi")
	private NumberPicker.OnValueChangeListener mOnDateChangedListener = new OnValueChangeListener()
	{
		
		@SuppressLint("NewApi")
		public void onValueChange(NumberPicker picker, int oldVal, int newVal)
		{
			mSecond = mHourSpinner.getValue();
		}
	};

	@SuppressLint("NewApi")
	private NumberPicker.OnValueChangeListener mOnHourChangedListener = new OnValueChangeListener()
	{
		
		@SuppressLint("NewApi")
		public void onValueChange(NumberPicker picker, int oldVal, int newVal)
		{
			mHour = mHourSpinner.getValue();
		}
	};

	@SuppressLint("NewApi")
	private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new OnValueChangeListener()
	{
		
		@SuppressLint("NewApi")
		public void onValueChange(NumberPicker picker, int oldVal, int newVal)
		{
			mMinute = mMinuteSpinner.getValue();
		} 
	};



	class TimeCount implements Runnable
	{
		@Override
		public void run()
		{
			while ( !STOP && time > 0)// 整个倒计时执行的循环
			{
				time--;
				mHandler.post(new Runnable() // 通过它在UI主线程中修改显示的剩余时间
				{
					public void run()
					{
						timeCount.setText(getInterval(time));// 显示剩余时间
					}
				});
				try
				{
					Thread.sleep(1000);// 线程休眠一秒钟 这个就是倒计时的间隔时间
				} catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
			// 下面是倒计时结束逻辑
			mHandler.post(new Runnable()
			{
				@Override
				public void run()
				{
					timeCount.setText("设定的时间到。");
				}
			});
		}
	}

  /**
	 * 设定显示文字
	 */
	public static String getInterval(int time)
	{
		String txt = null;
		if (time >= 0)
		{

			long hour = time % (24 * 3600) / 3600;// 小时
			long minute = time % 3600 / 60;// 分钟
			long second = time % 60;// 秒
			
			txt =" 距离现在还有:" + hour + "小时" + minute + "分" + second + "秒";
		} 
		else
		{
			txt="已过期";
		}
		return txt;
	}
}

  

采用数字控件的倒计时,布布扣,bubuko.com

采用数字控件的倒计时

标签:android   blog   http   java   os   io   art   cti   

原文地址:http://www.cnblogs.com/jun-qiangf/p/3885787.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!