热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

倒计时效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用CountDownTimer定时器简单封装下此效果,方便我们随时调用。下面小编给大家分享android验证码倒计时封装方法,感兴趣的朋友一起看看吧

效果如下图所示:

 

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

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


 
  
  
  
  
 

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

/**
 * 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应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
author-avatar
Emily嘿嘿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有