![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TPRlldGdUYqZ1VlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN3YTN1czMzEzNxMDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/activity_vertical_margin"
tools:context="com.example.yechaoa.timedemo.MainActivity">
<TextView
android:textColor="#fff"
android:padding="10dp"
android:background="#f60"
android:id="@+id/tv_time"
android:gravity="center"
android:layout_width="160dp"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
2.MainActivity.java
package com.example.yechaoa.timedemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tvTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTime = (TextView) findViewById(R.id.tv_time);
tvTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* 1.上下文
* 2.總時間
* 3.計時機關
* 4.控件對象
*/
//驗證碼倒計時
TimeLastUtil timeLastUtil = new TimeLastUtil(MainActivity.this, 60000, 1000, tvTime);
timeLastUtil.start();
//根據指定時間,兩小時倒計時
/*long waitTime = TimeLastUtil.getRemainderTime("2017-03-17 12:20:00");//指定時間,根據需求傳入時間
TimeLastUtil timeLastUtil = new TimeLastUtil(MainActivity.this, waitTime, 1000, tvTime);
timeLastUtil.setType(1);
timeLastUtil.start();*/
}
});
}
}
3.TimeLastUtil.java
package com.example.yechaoa.timedemo;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.os.CountDownTimer;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by yechaoa on 2016/11/11.
*/
public class TimeLastUtil extends CountDownTimer {
private Context mActivity;
private TextView btn;
private int type = 0;
/**
* 1.上下文
* 2.總時間
* 3.計時機關
* 4.控件對象
*/
public TimeLastUtil(Context mActivity, long millisInFuture, long countDownInterval, TextView btn) {
super(millisInFuture, countDownInterval);
this.mActivity = mActivity;
this.btn = btn;
}
/**
* 根據設定的間隔時間循環調用
* @param millisUntilFinished
*/
private int length;
@Override
public void onTick(long millisUntilFinished) {
if (type == 1) {
int mi = 1000 * 60;
//計算分鐘
long minute = millisUntilFinished / mi;
//總時間-分鐘的毫秒數得到秒數
long second = (millisUntilFinished - minute * mi) / 1000;
//計算小時
long hour = minute / 60;
long showMinute = minute - hour * 60;
String strHour = hour < 10 ? "0" + hour : "" + hour;
//分
String strMinute = minute < 10 ? "0" + showMinute : "" + showMinute;
//秒
String strSecond = second < 10 ? "0" + second : "" + second;
// 設定倒計時時間
btn.setText("倒計時:" + strHour + ":" + strMinute + ":" + strSecond);
} else {
// 設定背景為灰色,這時是不能點選的
btn.setClickable(false);
btn.setBackgroundColor(Color.GRAY);
// 設定倒計時時間
btn.setText(millisUntilFinished / 1000 + "s後重新擷取");
// 擷取按鈕的文字
Spannable span = new SpannableString(btn.getText().toString());
if(millisUntilFinished / 1000>9){
length=2;
}else{
length=1;
}
// 将倒計時時間顯示為紅色
span.setSpan(new ForegroundColorSpan(Color.RED), 0, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
btn.setText(span);
}
}
/**
* 結束時調用
*/
@SuppressLint("NewApi")
@Override
public void onFinish() {
if (type == 1) {//兩小時倒計時
btn.setText("倒計時結束");
btn.setTextColor(Color.WHITE);
btn.setEnabled(false);
} else {//驗證碼倒計時
btn.setText("重新擷取驗證碼");
btn.setClickable(true);
// 還原背景色
btn.setBackgroundColor(Color.parseColor("#ff6600"));
}
}
/**
* 設定類型
* @param mType
*/
public void setType(int mType) {
this.type = mType;
}
/**
* 根據指定時間進行兩小時倒計時
* @param insertTime
* @return
*/
public static long getRemainderTime(String insertTime) {
long waitTime = 0;
//時間格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//擷取目前時間
Date curDate = new Date(System.currentTimeMillis());
String date1 = sdf.format(curDate);
try {
Date d1 = sdf.parse(date1);
Date d2 = sdf.parse(insertTime);
/**
* 目前時間 - 指定的時間 = 已經過去的時間
* 兩小時 - 過去的時間 = 開始計時的時間
*/
waitTime = (2 * 60 * 60 * 1000) - (d1.getTime() - d2.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return waitTime;
}
}
Demo位址:https://github.com/yechaoa/TimeDemo