Android 倒计时处理

时间:2021-08-05 10:16:47

转载请注明出处:http://blog.csdn.net/magic_jss/article/details/52741332
Android中的计时操作主要包括,倒计时处理、定时器处理。其实倒计时处理sdk提供了CountDownTimer类,定时器处理则提供了Timer、TimerTask类,今天就通过CountDownTimer、Timer分别实现获取手机验证码效果

效果图:

Android 倒计时处理

比较low~~~由于非常简单,就不多赘述了,直接上代码~·~

1、CountDownTimer实现

CountDownTimer:安排一个倒计时,直到未来的时间,定期通知在路上的时间间隔。

/**
* Created by magic on 2016年10月5日.获取验证码效果
*/

@SuppressLint("HandlerLeak")
public class MainActivity extends Activity {

Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// 开始倒计时
timer.start();
btn.setClickable(false);
}
});

}

// 第一个参数表示总时间,第二个参数表示间隔时间。意思就是每隔一秒会回调一次方法onTick,然后60秒之后会回调onFinish方法
final CountDownTimer timer = new CountDownTimer(60000, 1000) {

@Override
public void onTick(long arg0) {
// 定期定期回调
btn.setText((arg0 / 1000) + "秒后可重发");
}

@Override
public void onFinish() {
// 结束后回到
btn.setText("获取验证码");
btn.setClickable(true);
}
};

}

布局文件main.xml,就一个按钮。

<?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:orientation="vertical" >


<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取验证码" />


</LinearLayout>

2、Timer、TimerTask实现

/**
* Created by magic on 2016年10月5日.获取验证码效果
*/

@SuppressLint("HandlerLeak")
public class MainActivity extends Activity {
Button btn;
// 总时间
long totalTime;
// 剩余时间
long remainingTime;
// 定时器
Timer timer;
// 定时器任务
Task task;

Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (remainingTime <= 0) {
// 取消定时器所有预定的任务
timer.cancel();
task.cancel();
btn.setText("获取验证码");
btn.setClickable(true);
return;
}
btn.setText((remainingTime / 1000) + "秒后可重发");
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
remainingTime = 10000;
timer = new Timer();
task = new Task();
// 执行任务
timer.schedule(task, 0, 1000);
btn.setClickable(false);

}
});

}

/**
* 定时器任务 会开启一个工作线程
*/

class Task extends TimerTask {

@Override
public void run() {
remainingTime = remainingTime - 1000;
// 发送消息通过主线程更新UI
handler.sendEmptyMessage(0);
}
}
}

是不是很简单呢!

天生我材必有用,千金散尽还复来。