Android开发:验证码倒计时功能实现

前言

现在好多个APP里面都有验证码倒计时按钮,实现方式大概有下面几种:

  • 1.使用线程和Handler的方式,定时刷新倒计时数字,这种方式容易导致内存泄露,所以一般都使用弱引用,控制数字的刷新。
  • 2、自定义倒计时按钮
  • 3、使用Android提供的CountDownTimer结合TextView实现倒计时功能

这篇主要就是说下用第三种方式实现,简单好用

效果图

实现

以下是核心代码:

/**
 * Created by hfs on 2017/5/9.
 */

public class TimeCount extends CountDownTimer {
    private Button button;
    private String tickText;
    private String finishText;

    /**
     * @param millisInFuture    倒计时总时长
     * @param countDownInterval 倒计时单位 毫秒.
     */
    public TimeCount(long millisInFuture, long countDownInterval,
                     Button button,String tickText,String finishText) {
        super(millisInFuture, countDownInterval);
        this.button = button;
        this.tickText=tickText;
        this.finishText=finishText;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        button.setText(millisUntilFinished / 1000 + tickText);
        button.setEnabled(false);
    }

    @Override
    public void onFinish() {
        button.setEnabled(true);
        button.setText(finishText);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

我自己又简单的封装成了一个自定义的Button,以后直接用着个自定义的Button即可

/**
 * Created by hfs on 2017/5/9.
 */

public class CountDownButton extends Button {

    private TimeCount mTimeCount;
    private long millisInFuture = 60000;
    private long countDownInterval = 1000;
    private String mTickText = "s后重新获取";
    private String mFinishText = "重新获取";

    public CountDownButton(Context context) {
        super(context);
        init(context);
    }

    public CountDownButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {

    }

    /**
     * 设置倒计时多少毫秒结束
     * 默认60秒
     *
     * @param millisInFuture 毫秒
     */
    public void setMillisInFuture(long millisInFuture) {
        this.millisInFuture = millisInFuture;
    }

    /**
     * 设置倒计时间隔
     * 默认1秒
     *
     * @param countDownInterval 倒计时间隔
     */
    public void setCountDownInterval(long countDownInterval) {
        this.countDownInterval = countDownInterval;
    }

    /**
     * 设置倒计时过程中button显示内容
     * @param text 默认 s后重新获取
     */
    public void setOnTickText(String text) {
        this.mTickText=text;
    }

    /**
     * 设置倒计时结束button显示内容
     * @param finishText 默认 重新获取
     */
    public void setOnFinishText(String finishText){
        this.mFinishText=finishText;
    }

    public void startCount() {
        mTimeCount = new TimeCount(millisInFuture, countDownInterval, this, mTickText, mFinishText);
        mTimeCount.start();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

使用方法很简单,就几行代码即可:

public class MainActivity extends AppCompatActivity {

    private CountDownButton mCountDownButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCountDownButton = (CountDownButton) findViewById(R.id.btn_count_down);
        mCountDownButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCountDownButton.startCount();
            }
        });
    }
}
时间: 2024-11-16 11:14:34

Android开发:验证码倒计时功能实现的相关文章

【Android】验证码倒计时(Service完成,页面切换不中断)

[Android]验证码倒计时(Service完成,页面切换不中断) Service+CountDownTimer+Handler完成倒计时功能,页面切换不中断. 下载地址:http://www.devstore.cn/code/info/598.html

Android开发之发送邮件功能的实现(源代码分享)

Android开发中可能会碰到如何发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法,总共有3种把,我仔细阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰,我今天就来分享下我认为的最好用的办法来解决该问题,使用Andorid-MAIL Jar包.首先我们先要下载以下四个文件 然后呢在Android平台上发送邮件呢,肯定先要检查网络的状态,网络状态可用的情况下才能发送邮件成功啊(别往了获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. ) publ

iOS-实现验证码倒计时功能(1)

验证码倒计时按钮的应用是非常普遍的,该Blog就和你一起来写一个IDCountDownButton来实现验证码倒计时的效果.你可以想使用普通的UIButton类型按钮一样,只需要设置其倒计时时长(若未设置,默认为60秒),就可以轻松的实现点击countDownButton开始倒计时,倒计时结束方可重新点击. 一.实现效果如图 二.实现思路1.自定义一个IDCountDownButton,重写 beginTrackingWithTouch:withEvent: 拦截button的点击事件,根据是否

如何在 Laravel 中 “规范” 的开发验证码发送功能

什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).ThinkSNS V4.ThinkSNS[简]. 需求场景 发送「验证码」或者「消息通知」,可发送到手机或邮箱中. 完成 首先,在Laravel中的规范就是使用Laravel的「消息通知」,这里基于场景为「验证码」.这个需求几乎所有软件系统都有使用到. 创建通知场景 第一步,使用php artisan ma

Android开发之拍照功能实现(附源码)

大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个“拍照”按钮.直接上代码! 1.CameraDemoActivity.java(主界面) package org.winplus.camera; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import android.app.Activity;

iOS开发—验证码倒计时

__block int timeout=59; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); dispatch_source_set_timer(timer,dispatch

Android 开发之集成百度地图的定位与地图展示

app 应用中,大多数应用都具有定位功能,百度定位就成了开发人员的集成定位功能的首选,最近也在做定位功能,但是发现百度真是个大坑啊, sdk 命名更新了,相关代码却不更新,害得我花费了很长时间来研究,今天来给大家分享下 Android 集成百度地图要注意的事情,这里只是集成了定位和地图展示功能,其他功能还未涉及,先看下效果图: 接下来介绍一下 Android 集成百度地图的步骤: 首先登陆百度开发平台,在我的应用中创建应用,然后你会看到如下界面: 根据它的要求填写相关信息,这里的安全是有 SHA

iOS 短信验证码倒计时按钮的实现

验证码倒计时按钮的应用是非常普遍的,本文介绍了IOS实现验证码倒计时功能,点击获取验证码,进入时间倒计时,感兴趣的小伙伴们可以参考一下: 实现思路: 创建按钮,添加点击方法: 用NSTimer定时器,每秒执行一次,定时改变Button的title,改变Button的样式,设置Button不可点击: 若倒计时结束,定时器关闭,并改变Button的样式,可以点击: 代码如下: 在按钮的点击事件里调用该方法      -(void)openCountdown{ __block NSInteger ti

Android开发之按键、触摸屏和手势输入专业压力测试方法

按键输入.触摸屏输入和手势笔画输入等功能是Android开发的基本功能,其稳定性和健壮性对移动应用系统开发非常重要.按键.触摸屏和手势输入专业压力测试方法可以使用Monkey,对应用程序进行压力测试,检测该应用的稳定性.健壮性.Monkey是Android平台下自动化测试工具,它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等). 一.压力测试工具Monkey基本用法: adb shell monkey [options] 注:若不指定options,Monkey将以无反馈模式启