欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 中倒计时验证两种常用方式实例详解

程序员文章站 2023-10-27 18:33:04
android 中倒计时验证两种常用方式实例详解 短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用。看图: 说明:这里的及时从10开始,是为了演示的时间不...

android 中倒计时验证两种常用方式实例详解

短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用。看图:

Android 中倒计时验证两种常用方式实例详解

说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的。

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);
  }
}

说明:根据自己的需求,在这里修改背景颜色和不同状态显示文字即可,在需要监听的按钮下直接调用new timercount(xxx,xxx,xxx).start()即可。

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();
  }

说明:此种方式采用的handler实时接收消息来设置button的状态,对于消息的发送用的是sendmessage方式,也可以使用post方式。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!