Android获取验证码倒计时显示效果

前面为大家讲过计时器的顺时针的两种方法,在录制视频等操作中颇有使用,今天就给大家带来倒计时实现的两种方式。

虽然最近写的都比较简单和基础,不过简单不代表熟悉,基础不代表就会,大牛绕过,哈,中牛小牛也可以绕过,这个是写给初学者的。

先搞个效果图。

代码实现方式也超级简单啦,这里首推第一种实现方式,而且也是比较适合大家的,就是通过直接继承CountDownTimer来实现。

对于CountDownTimer这个类很简单,继承它的时候必须重写构造方法和实现其虚拟方法。

构造方法的两个参数分别是(倒计时开始时间,间隔时间)

另外两个方法分别是onTick(现在还剩的时间),计时结束后你想做的时间可以在onFinish()中做。

值的注意的是,所有的时间都是以毫秒形式来做的,所以在你使用的时候要记得整除1000取商。

不过由于我使用的是私有内部类的方式对外部类存在引用,为了防止内存泄漏,在Activity销毁的时候应该注意对其置空,同样我们也应该避免重复创建对象。

另外一种方式还是使用我们常用的Handler + Thread的方式来实现。不过实现的时候同样要非常小心内存泄漏,因为如果用户在销毁Activity的时候应该注意让其计时子线程不再循环,这个可以通过设置一个tag标签对其判断。

这样在销毁的时候把这个tag标签置为false,结束线程的执行!

下面是实现代码:

package com.example.nanchen.timerdemo; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button mBtnGetCode; private TimeCount mTimeCount; private Button mBtnGetCode2; private boolean timeFlag = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnGetCode = (Button) findViewById(R.id.main_btn_get_code); mBtnGetCode.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mTimeCount = null; mTimeCount = new TimeCount(60 * 1000, 1000); mTimeCount.start(); } }); mBtnGetCode2 = (Button) findViewById(R.id.main_btn_get_code_2); mBtnGetCode2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mBtnGetCode2.setClickable(false); mBtnGetCode2.setBackgroundColor(getResources().getColor(R.color.btn_unable)); timeFlag = true; new Thread() { @Override public void run() { super.run(); for (int i = 59; i >= 0 && timeFlag; i--) { try { sleep(1000); Message msg = Message.obtain(); msg.what = i; mHandler.sendMessage(msg); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what > 0) { mBtnGetCode2.setText("(" + msg.what + ")秒后重试"); } else { mBtnGetCode2.setText("获取验证码"); mBtnGetCode2.setClickable(true); mBtnGetCode2.setBackgroundColor(getResources().getColor(R.color.colorAccent)); } } }; /** * Activity 销毁的时候注意把所有引用置为空,防止内存泄漏 */ @Override protected void onDestroy() { super.onDestroy(); mTimeCount = null; timeFlag = false; } /** * 实现倒计时的类 */ private class TimeCount extends CountDownTimer { /** * @param millisInFuture The number of millis in the future from the call * to {@link #start()} until the countdown is done and {@link #onFinish()} * is called. * @param countDownInterval The interval along the way to receive * {@link #onTick(long)} callbacks. */ public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } /** * 计时过程显示 按钮不可用 设置为灰色 * * @param millisUntilFinished */ @Override public void onTick(long millisUntilFinished) { mBtnGetCode.setClickable(false); mBtnGetCode.setBackgroundColor(getResources().getColor(R.color.btn_unable)); mBtnGetCode.setText("(" + millisUntilFinished / 1000 + ")秒后重试"); } /** * 计时结束调用 */ @Override public void onFinish() { mBtnGetCode.setClickable(true); mBtnGetCode.setText("获取验证码方式1"); mBtnGetCode.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); } } }

简单看一下xml文件

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.nanchen.timerdemo.MainActivity"> <Button android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/main_btn_get_code" android:text="获取验证码方式1" android:background="@color/colorPrimaryDark"/> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:id="@+id/main_line1" android:background="@color/btn_unable" android:layout_below="@+id/main_btn_get_code" android:layout_marginTop="10dp"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/main_line1" android:layout_marginTop="10dp" android:text="获取验证码方式2" android:id="@+id/main_btn_get_code_2" android:background="@color/colorAccent"/> </RelativeLayout>

写在最后:虽然代码和实现都非常简单,你可能不费吹灰之力,不过倘若转载的话,还是留个本文链接吧~thank you!

github链接:https://github.com/nanchen2251/TimerDemo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-24 16:05:53

Android获取验证码倒计时显示效果的相关文章

Android获取验证码倒计时显示效果_Android

前面为大家讲过计时器的顺时针的两种方法,在录制视频等操作中颇有使用,今天就给大家带来倒计时实现的两种方式. 虽然最近写的都比较简单和基础,不过简单不代表熟悉,基础不代表就会,大牛绕过,哈,中牛小牛也可以绕过,这个是写给初学者的. 先搞个效果图. 代码实现方式也超级简单啦,这里首推第一种实现方式,而且也是比较适合大家的,就是通过直接继承CountDownTimer来实现. 对于CountDownTimer这个类很简单,继承它的时候必须重写构造方法和实现其虚拟方法. 构造方法的两个参数分别是(倒计时

Android账号注册实现点击获取验证码倒计时效果_Android

网站中为了防止恶意获取验证短信.验证邮箱,都会在点击获取验证码的按钮上做个倒计时的效果,如何实现这个效果,具体内容如下 效果图:   代码: RegisterActivity.java import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import com.jialianjia.bzw.BaseAct

Andorid实现点击获取验证码倒计时效果_Android

我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取,为了方便以后使用,这里做个记录,讲讲倒计时器的实现.  1.先进行倒计时工具类的封装  public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; /** * @param textView The TextView * * * @param millisInFuture The number of m

iOS获取验证码倒计时效果_IOS

本文实例为大家分享了iOS倒计时获取验证码的具体代码,供大家参考,具体内容如下 1. 倒计时发送验证码,界面跳转计时会重置 /**重新发送短信的计时*/ -(void)fireTimer{ __block int timeout=180; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t _timer = dispatc

js实现点击获取验证码倒计时效果_javascript技巧

网站中为了防止恶意获取验证短信.验证邮箱,都会在点击获取验证码的按钮上做个倒计时的效果.实现这个功能,一个setInterval和一个clearInterval就能搞定了,不需要太多的代码.实例效果和代码如下: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <input type="button" style="height:

Android账号注册实现点击获取验证码倒计时效果

网站中为了防止恶意获取验证短信.验证邮箱,都会在点击获取验证码的按钮上做个倒计时的效果,如何实现这个效果,具体内容如下 效果图: 代码: RegisterActivity.java import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import com.jialianjia.bzw.BaseActiv

Andorid实现点击获取验证码倒计时效果

我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取,为了方便以后使用,这里做个记录,讲讲倒计时器的实现. 1.先进行倒计时工具类的封装 public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; /** * @param textView The TextView * * * @param millisInFuture The number of mil

Javascript获取验证码倒计时示例

我们经常网购,在支付前为了验证客户的身体, 有时需要获取手机发送的验证码,当点击获取验证码按纽时会出现倒计时,如下图所示 实现方法: <script src="./js/jquery-1.8.3.min.js"></script> <input type="button" id="btn" value="免费获取验证码" /> <script type="text/javas

Android中验证码倒计时的简单实现方法示例

前言 现在的很多app都是使用手机注册的,为了确认使用的是自己的手机,都会加上一个短线验证码的选项,最近公司的项目使用到了这个短信验证码,并且要加入验证码倒计时功能,也就是60秒才能发送一次验证码,再次做过记录,以后使用的时候,可以随时拿来用. 实现 发送验证码的时候一般都会有一个按钮,点击之后便会给你输入的手机发送一条验证码,我这里使用的是一个TextView,显示特定的数字,只用设置TextView的点击事件即可: Android中有一个类,可以很方便的时候该功能,但是也会存在一个问题,就是