直接上代码:

eg: 关键点都在注释里

import android.annotation.SuppressLint;

import android.app.Activity;

import android.os.CountDownTimer;

import android.widget.TextView;

import java.lang.ref.WeakReference;

/**

* 倒计时工具类

* @author yi lu

*/

public class CountDownTimerUtils extends CountDownTimer {

WeakReference mTextView; //显示倒计时的文字 用弱引用 防止内存泄漏

private int mTickType; // 倒计时中的文字显示

private String mFinishTxt; // 倒计时结束后的文字显示

public CountDownTimerUtils(TextView textView, long millisInFuture, long countDownInterval) {

super(millisInFuture, countDownInterval);

this.mTextView = new WeakReference(textView);

}

/**

* 设置文字解析内容(自定义)

*/

public void setTickType(int tickType) {

this.mTickType = tickType;

}

/**

* 设置倒计时结束时的文字

*/

public void setFinishTxt(String finishTxt) {

this.mFinishTxt = finishTxt;

}

@SuppressLint("SetTextI18n")

@Override

public void onTick(long millisUntilFinished) {

if (mTextView.get() == null) //用弱引用 先判空 避免崩溃

{

cancle();

return;

}

mTextView.get().setClickable(false); //设置不可点击

mTextView.get().setText(formatTick(millisUntilFinished)); //设置倒计时时间

mTextView.get().setText(mTextView.get().getText().toString());

}

@Override

public void onFinish() {

if (mTextView.get() == null) //同上 先判空 避免崩溃

{

cancle();

return;

}

mTextView.get().setText(mFinishTxt);//设置结束文字

mTextView.get().setClickable(true);//设置可点击

}

/**

* 退出当前工具类

*/

private void cancle()

{

this.cancel();

}

/**

* 自定义解析模板(根据场景自己编写)

*/

private String formatTick(long millis)

{

switch (mTickType)

{

case 0:

return "重新发送(" + millis / 1000 + "S)";

case 1:

return formatTime(millis);

}

return "";

}

/**

* 将毫秒转化为 分钟:秒 的格式

*

* @param millisecond 毫秒

* @return 格式化后的时间

*/

private String formatTime(long millisecond)

{

int minute;//分钟

int second;//秒数

minute = (int) ((millisecond / 1000) / 60);

second = (int) ((millisecond / 1000) % 60);

if (minute < 10)

{

if (second < 10)

{

return "0" + minute + "分" + "0" + second + "秒";

} else

{

return "0" + minute + "分" + second + "秒";

}

} else

{

if (second < 10)

{

return minute + "分" + "0" + second + "秒";

} else

{

return minute + "分" + second + "秒";

}

}

}

}

调用

private CountDownTimerUtils mCountDownTimerUtils = null;

mCountDownTimerUtils = new CountDownTimerUtils(

tvDown, 3600000, 1000); //倒计时1小时

mCountDownTimerUtils.setTickType(1);

mCountDownTimerUtils.setFinishTxt("交易关闭……");

mCountDownTimerUtils.start();

销毁

@Override

protected void onDestroy() {

if (mCountDownTimerUtils == null) return;

mCountDownTimerUtils.cancel();

mCountDownTimerUtils = null;

super.onDestroy();

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐