简单实现短信验证码的倒计时效果

简单实现短信验证码的倒计时效果

话不多说,直接开始!要实现我们的倒计时效果,使用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的小伙伴一点帮助。

猜你喜欢

转载自blog.csdn.net/w13576267399/article/details/76821740