转载请注明出处:http://blog.csdn.net/magic_jss/article/details/52741332;
Android中的计时操作主要包括,倒计时处理、定时器处理。其实倒计时处理sdk提供了CountDownTimer类,定时器处理则提供了Timer、TimerTask类,今天就通过CountDownTimer、Timer分别实现获取手机验证码效果。
效果图:
比较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);
}
}
}
是不是很简单呢!
天生我材必有用,千金散尽还复来。