简单实现短信验证码的倒计时效果
话不多说,直接开始!要实现我们的倒计时效果,使用Handler就能够简单的又效率的实现效果。整体逻辑是使用handler每间隔一秒发送一次消息更新UI,下面上代码。
简单的一个按钮,xml就不放出来了
首先定义一个Handler内部类,并且复写sendMessage方法
class MyHandler extends android.os.Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//根据不同标识响应不同事件
switch (msg.what) {
case 0x01:
button.setText("重新发送("+msg.arg1+")");
break;
case 0x02:
button.setText("重新获取验证码");
//按钮可点击
button.setClickable(true);
break;
}
}
}
然后是按钮的点击事件,点击按钮后,禁止按钮点击,然后创建一个线程,并使线程每隔一秒发送一次消息,循环60秒,循环结束后再发送一次消息,表示秒数走完
@OnClick(R.id.button)
public void onViewClicked() {
button.setClickable(false);//按钮不可点击
// 开始线程去更新button的text
new Thread(new Runnable() {
@Override
public void run() {
// 总秒数为60秒
int totalNum = 60;
//循环发送消息去更新UI
for (int i = 0; i < totalNum; i++) {
//构建一个消息对象,并且设置标识
Message message = handler.obtainMessage(0x01);
message.arg1 = totalNum - i;
// 发送剩余秒数的消息
handler.sendMessage(message);
try {
//每休眠一秒,发送一次
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//循环完成后再发送一个消息,表示完成
handler.sendEmptyMessage(0x02);
}
}).start();
}
写到这里,功能就已经实现了,这篇博客希望能给初入Android的小伙伴一点帮助。