Android倒计时按钮的制作方法

编程之家收集整理的这篇文章主要介绍了Android倒计时按钮的制作方法编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

倒计时按钮是我们常用的一个模块,例如获取验证码后倒计时,那么这个倒计时按钮如何制作呢具体,下面编程之家跟大家分享:Android倒计时按钮的制作方法

终极效果如图

实现代码如下

package com.dylan.frame.ui;
  
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
  
import java.util.Timer;
import java.util.TimerTask;
  
/**
 * 自定义倒计时按钮
 * <p/>
 * @author Dylan
 *     <p/>
 *     [佛祖保佑 永无BUG]
 */
public class CountdownButton extends Button implements View.OnClickListener {
  private long lenght = 60 * 1000;//认倒计时时间;
  private long time;//倒计时时长
  private Timer timer;//开始执行倒计时
  private TimerTask timerTask;//每次倒计时执行的任务
  private String beforeText = "点击获取验证码";
  private String afterText = "秒后重新获取";
  private OnClickListener onClickListener;//按钮点击事件
  /**
   * 更新显示的文本
   */
  private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      CountdownButton.this.setText(time / 1000 + afterText);
      time -= 1000;
      if (time < 0) {
        CountdownButton.this.setEnabled(true);
  
        CountdownButton.this.setText(beforeText);
  
        clearTimer();
      }
    }
  };
  
  
  public CountdownButton(Context context) {
    super(context);
    this.setText(beforeText);
    setonClickListener(this);
  }
  
  public CountdownButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    setonClickListener(this);
  }
  
  public CountdownButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setonClickListener(this);
  }
  
  /**
   * 清除倒计时
   */
  private void clearTimer() {
    if (timerTask != null) {
      timerTask.cancel();
      timerTask = null;
    }
    if (timer != null) {
      timer.cancel();
      timer = null;
    }
  }
  
  /**
   * 设置倒计时时长
   *
   * @param lenght 认毫秒
   */
  public void setLenght(long lenght) {
    this.lenght = lenght;
  }
  
  /**
   * 设置未点击时显示文字
   *
   * @param beforeText
   */
  public void setBeforeText(String beforeText) {
    this.beforeText = beforeText;
  }
  
  /**
   * 设置未点击后显示文字
   *
   * @param beforeText
   */
  public void setAfterText(String afterText) {
    this.afterText = afterText;
  }
  
  /**
   * 点击按钮后的操作
   *
   * @param v
   */
  @Override
  public void onClick(View v) {
    if (onClickListener != null) {
      onClickListener.onClick(v);
    }
    initTimer();
    this.setText(time / 1000 + afterText);
    this.setEnabled(false);
    timer.schedule(timerTask, 0, 1000);
  }
  
  /**
   * 初始化时间
   */
  private void initTimer() {
    time = lenght;
    timer = new Timer();
    timerTask = new TimerTask() {
      @Override
      public void run() {
        handler.sendEmptyMessage(1);
      }
    };
  }
  
  /**
   * 设置监听按钮点击事件
   *
   * @param onclickListener
   */
  @Override
  public void setonClickListener(OnClickListener onclickListener) {
    if (onclickListener instanceof CountdownButton) {
      super.setonClickListener(onclickListener);
  
    } else {
      this.onClickListener = onclickListener;
    }
  
  }
}

总结

以上是编程之家为你收集整理的Android倒计时按钮的制作方法全部内容,希望文章能够帮你解决Android倒计时按钮的制作方法所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

Android相关文章

前面我发过一篇文章,脱离了Spring询问大家能不能继续开发,结果文章下面的评论和回复都告诉我大家伙的基础打得很牢固,该咋写还是咋写。看得我在这内卷的时代瞬间躺...
手机等智能设备是现代生活中的重要角色,我们会在这些智能设备上做登录账户,设置偏好,拍摄照片,保存联系人等日常操作。这些数据耗费了我们很多时间和精力,对我们而言极...
大家肯定也都或多或少的写过一些Groovy代码,但由于不支持代码提示及编译时检查,使用Groovy开发的体验并不太好,Android Gradle插件4.0之后...
手机厂商还没卷完Android 12,Android 13就悄然声息地来了,距离Google 2008年9月22日发布Android 1.0,已过去13个年头。
手机厂商还没卷完Android 12,Android 13就悄然声息地来了,距离Google 2008年9月22日发布Android 1.0,已过去13个年头。
Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了。我这么说,大家不知道是否认同,如果认同,还希望能给一个...
在分析源码之前,我想你应该对 Android 打包流程已经有基础的了解,至少了解了下图的打包过程:
上篇文章《Android安卓进阶技术分享之AGP工作原理》和大家分析了 AGP(Android Gradle Plugin) 做了哪些事,了解到 AGP 就是为...
众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Andro...
传统意义上的协程是单线程的,面对io密集型任务他的内存消耗更少,进而效率高。但是面对计算密集型的任务不如多线程并行运算效率高。
21世纪,安卓虚拟机正在一步步的走入我们的生活,小到个人部分朋友在电脑上使用安卓虚拟机玩手游,大到安卓从业人员在虚拟机上面跑程序。不得不承认,对于每一位Andr...
作为Android中 至关重要 的机制之一,十多年来,分析它的文章不断,大量的内容已经被挖掘过了。所以: