Android 简单封装获取验证码倒计时功能

所属分类: 软件编程 / Android 阅读数: 50
收藏 0 赞 0 分享

效果如下图所示:

 

如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用 CountDownTimer 定时器简单封装下此效果,方便我们随时调用。

首页先在 attrs.xml 中定义下所需的几个属性:

<resources>
 <declare-styleable name="CountDownButton">
  <attr name="millisinfuture" format="integer"/>
  <attr name="countdowninterva" format="integer"/>
  <attr name="normalColor" format="color"/>
  <attr name="countDownColor" format="color"/>
 </declare-styleable>
</resources>

下面是实现的具体代码,很简单的一种方式,通俗易懂:

/**
 * Created by xiaolong on 2018/1/12.
 */
@SuppressLint("AppCompatCustomView")
public class CountDownButton extends Button{
 //总时长
 private long millisinfuture;
 //间隔时长
 private long countdowninterva;
 //默认背景颜色
 private int normalColor;
 //倒计时 背景颜色
 private int countDownColor;
 //是否结束
 private boolean isFinish;
 //定时器
 private CountDownTimer countDownTimer;
 public CountDownButton(Context context) {
  this(context,null);
 }
 public CountDownButton(Context context, AttributeSet attrs) {
  this(context, attrs,0);
 }
 public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CountDownButton,defStyleAttr,0);
  //设置默认时长
  millisinfuture = (long) typedArray.getInt(R.styleable.CountDownButton_millisinfuture,60000);
  //设置默认间隔时长
  countdowninterva = (long)typedArray.getInt(R.styleable.CountDownButton_countdowninterva,1000);
  //设置默认背景色
  normalColor = typedArray.getColor(R.styleable.CountDownButton_normalColor,android.R.color.holo_blue_light);
  //设置默认倒计时 背景色
  countDownColor = typedArray.getColor(R.styleable.CountDownButton_countDownColor,android.R.color.darker_gray);
  typedArray.recycle();
  //默认为已结束状态
  isFinish = true;
  //字体居中
  setGravity(Gravity.CENTER);
  //默认文字和背景色
  normalBackground();
  //设置定时器
  countDownTimer = new CountDownTimer(millisinfuture, countdowninterva) {
   @Override
   public void onTick(long millisUntilFinished) {
    //未结束
    isFinish = false;
    setText((Math.round((double) millisUntilFinished / 1000) - 1) + "秒");
    setBackgroundResource(countDownColor);
   }
   @Override
   public void onFinish() {
    //结束
    isFinish = true;
    normalBackground();
   }
  };
 }
 private void normalBackground(){
  setText("获取验证码");
  setBackgroundResource(normalColor);
 }
 public boolean isFinish() {
  return isFinish;
 }
 public void cancel(){
  countDownTimer.cancel();
 }
 public void start(){
  countDownTimer.start();
 }
}

一个简单的调用方式:

public class MainActivity extends AppCompatActivity {
 private CountDownButton countDownButton;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  countDownButton = ((CountDownButton) findViewById(R.id.countDownButton));
  countDownButton.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
    //这里判断是否倒计时结束,避免在倒计时时多次点击导致重复请求接口
    if (countDownButton.isFinish()) {
     //发送验证码请求成功后调用
     countDownButton.start();
    }
   }
  });
 }
 @Override
 protected void onDestroy() {
  super.onDestroy();
  if (!countDownButton.isFinish()) {
   countDownButton.cancel();
  }
 }
}

这样一个简单的封装就结束了,过程很简单。这里主要是对 CountDownTimer 的使用练习,之前工作中一直没有接触过这个类。顺便贴上源码吧!

以上所述是小编给大家介绍的Android 简单封装获取验证码倒计时功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多