zoukankan      html  css  js  c++  java
  • Android短信验证码倒计时

    有两种实现方法

    1、第一种方式:Timer

    /**
     * Description:自定义Timer
     * <p>
     * Created by Mjj on 2016/12/4.
     */
     
    public class TimeCount extends CountDownTimer {
     
      private Button button;
     
      //参数依次为总时长,和计时的时间间隔
      public TimeCount(Button button, long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        this.button = button;
      }
     
      //计时过程显示
      @Override
      public void onTick(long millisUntilFinished) {
        String time = "(" + millisUntilFinished / 1000 + ")秒";
        setButtonInfo(time, "#c1c1c1", false);
      }
     
      //计时完毕时触发
      @Override
      public void onFinish() {
        setButtonInfo("重新获取", "#f95353", true);
      }
     
      /**
       * 验证按钮在点击前后相关设置
       *
       * @param content 要显示的内容
       * @param color  颜色值
       * @param isClick 是否可点击
       */
      private void setButtonInfo(String content, String color, boolean isClick) {
        button.setText(content);
        button.setBackgroundColor(Color.parseColor(color));
        button.setClickable(isClick);
      }
    }

    2、第二种方式:Handler

    /**
       * 第二种方式:使用Handler
       * <p>
       * 静态内部类:避免内存泄漏
       */
      private static class MyHandler extends Handler {
     
        private final WeakReference<MainActivity> weakReference;
     
        public MyHandler(MainActivity activity) {
          weakReference = new WeakReference<MainActivity>(activity);
        }
     
        @Override
        public void handleMessage(Message msg) {
          super.handleMessage(msg);
          MainActivity activity = weakReference.get();
          if (activity != null) {
            switch (msg.what) {
              case 0:
                if (msg.arg1 == 0) {
                  btn2.setText("重新获取");
                  btn2.setBackgroundColor(Color.parseColor("#f95353"));
                  btn2.setClickable(true);
                } else {
                  btn2.setText("(" + msg.arg1 + ")秒");
                  btn2.setBackgroundColor(Color.parseColor("#c1c1c1"));
                  btn2.setClickable(false);
                }
                break;
            }
          }
        }
      }
     
      /**
       * 监听按钮下直接调用即可
       */
      private void sendMessageClick() {
        new Thread(new Runnable() {
          @Override
          public void run() {
            for (int i = 59; i >= 0; i--) {
              Message msg = myHandler.obtainMessage();
              msg.arg1 = i;
              myHandler.sendMessage(msg);
              try {
                Thread.sleep(1000);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
          }
        }).start();
      }
  • 相关阅读:
    npm run build无法打包的可能原因 npm ERR! missing script: build
    java的Scanner类的close()方法引来的故事
    Markdown语法1
    MarkdownPad2破解安装&使用
    MarkDown语法5
    Markdown语法2
    Markdown0
    Sublime Text配置anaconda环境
    解决:Tensorflowgpu中的Could not load dynamic library ‘cudart64_101.dll‘; dlerror: cudart64_101.dll not found
    Markdown语法4
  • 原文地址:https://www.cnblogs.com/AganRun/p/8118861.html
Copyright © 2011-2022 走看看