1.第一个样例 利用Handler实现倒计时
public class TimeThread extends Thread {
@Override
public void run () {
do {
try {
Thread.sleep(1000);
Message msg = new Message();
msg.what = msgKey1;
mHandler.sendMessage(msg);
}
catch (InterruptedException e) {
e.printStackTrace();
}
} while(true);
}
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage (Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case msgKey1:
//获取分钟数
long sysTime = System.currentTimeMillis();
DateFormat formatter = new SimpleDateFormat("mm");
final String format = formatter.format(sysTime);
int i = Integer.parseInt(format);
//倒计时
SimpleDateFormat sdfStopTime = new SimpleDateFormat("mm:ss", Locale.ENGLISH);
if(i < 30){
String newStoptime = sdfStopTime.format(new Date(30 * 60 * 1000 - System.currentTimeMillis() ));
mTime.setText("倒计时:"+newStoptime);
break;
}else{
String newStoptime = sdfStopTime.format(new Date(60 * 60 * 1000 - System.currentTimeMillis() ));
mTime.setText("倒计时:"+newStoptime);
break;
}
default:
break;
}
}
};
![](https://img.haomeiwen.com/i3487404/74a3bbd654f6e12e.png)
2.第二个样例 使用 CountDownTimer
CountDownTimer是android中自带的倒计时类
需要两个参数,一个是总计时的时间,一般验证码是60秒,就是60*1000。第二个参数是设置计时的速度,1000就是每秒一次。
如果总长度是10秒,速度是1,那么就是10-9-8-7-6-5-4-3-2-1-0;
如果总长度是10秒,速度是2,那么就是10-8-6-4-2-0;
总时间是不变的,如果需要更精确的计时展现,就修改第二个参数。
在创建对象的时候,需要重写onTick和onFinish的方法。
onTick就是我们剩余的时间,需要将之转化成秒展示出来。
在倒计时的过程中把按钮禁用。
然后在onFinish倒计时结束的时候,按钮启用。
最后通过.start启动倒计时。
/**
* 倒计时显示
*/
private void countDown() {
/**
* CountDownTimer timer = new CountDownTimer(3000, 1000)中,
* 第一个参数表示总时间,第二个参数表示间隔时间。
* 意思就是每隔一秒会回调一次方法onTick,然后1秒之后会回调onFinish方法。
*/
CountDownTimer timer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
button4.setEnabled(false);
button4.setText("已发送(" + millisUntilFinished / 1000 + ")");
}
@Override
public void onFinish() {
button4.setEnabled(true);
button4.setText("重新获取验证码");
}
}.start();
}
3、使用Timer和TimerTask
/**
* 倒计时显示3
*/
private Timer timer = new Timer();
private void countDown3() {
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
time--;
button4.setText("已发送(" + String.valueOf(time) + ")");
button4.setEnabled(false);
if (time <= 0) {
time = 10;
button4.setEnabled(true);
button4.setText("重新获取验证码");
}
}
});
}
};
//调用方法
timer.schedule(task, time, 1000);
}
写法二
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.arg1 = count;
if(count!=-1){
count--;
}else {
return;
}
handler.sendMessage(message);
}
}, 1000,1000);
4.利用动画实现倒计时
ValueAnimator animator = ValueAnimator.ofInt(5,0);
//设置时间
animator.setDuration(5000);
//均匀显示
animator.setInterpolator(new LinearInterpolator());
//监听
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (Integer) animation.getAnimatedValue();
tv.setText(value+"");
if(value==0){
startActivity(new Intent(MainActivity.this,Second.class));
}
}
});
animator.start();
网友评论