Android自定义控件实现验证码倒计时

今天给大家带来一个新的控件——验证码倒计时,先看下效果图

1 效果演示

2 使用方式

<com.landptf.view.CountDownM android:id="@+id/cdm_identifying_code" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_alignParentRight="true" android:text="获取验证码" landptf:backColor="@color/colorPrimary" landptf:countDownSeconds="10"/> CountDownM cdmIdentifyingCode = (CountDownM) findViewById(R.id.cdm_identifying_code); if (cdmIdentifyingCode != null) { cdmIdentifyingCode.setOnClickListener(new CountDownM.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(CountDownMTestActivity.this, "验证码发送成功", Toast.LENGTH_SHORT).show(); } }); }

以上几行代码即可实现倒计时的功能,这里面我们可以设置背景色以及倒计时的总时长。

3 实现方法

/** * Created by landptf on 2017/03/15. * 获取验证码倒计时控件 */ public class CountDownM extends ButtonM { private OnClickListener onClickListener = null; private CountDownTimer countDownTimer; /** * 倒计时总时长 */ private int countDownSeconds = 60; /** * 按钮的背景色 */ private int backColor = 0; public interface OnClickListener{ void onClick(View v); } public CountDownM(Context context) { this(context, null); } public CountDownM(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CountDownM(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.countDownM, defStyle, 0); if (a != null) { //设置背景色 ColorStateList colorList = a.getColorStateList(R.styleable.countDownM_backColor); if (colorList != null) { backColor = colorList.getColorForState(getDrawableState(), 0); if (backColor != 0) { setBackColor(backColor); } } else { setBackColor(getResources().getColor(R.color.mainColor)); } //获取倒计时总时长 int countDownSeconds = a.getInteger(R.styleable.countDownM_countDownSeconds, 60); setCountDownSeconds(countDownSeconds); a.recycle(); } //设置文字颜色 setTextColor(getResources().getColor(android.R.color.white)); //设置位置相关属性 setGravity(Gravity.CENTER); setPadding(ConvertM.dp2px(context, 8), 0, ConvertM.dp2px(context, 8), 0); setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onClickListener != null) { onClickListener.onClick(v); } //点击后开始计时 start(); } }); } /** * 设置倒计时总时长 * @param countDownSeconds */ public void setCountDownSeconds(int countDownSeconds){ this.countDownSeconds = countDownSeconds; } /** * 设置背景色 * @param backColor */ @Override public void setBackColor(int backColor) { this.backColor = backColor; super.setBackColor(backColor); } /** * 停止倒计时 */ public void stop(){ countDownTimer.cancel(); resetButton(); } public void setOnClickListener(OnClickListener l){ this.onClickListener = l; } private void start(){ setEnabled(false);//设置不能点击 countDownTimer = new CountDownTimer(countDownSeconds * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { setText(millisUntilFinished / 1000 + getResources().getString(R.string.count_down_m_recapture_after));//设置倒计时时间 //设置按钮为灰色,这时是不能点击的 CountDownM.super.setBackColor(Color.GRAY); Spannable span = new SpannableString(getText().toString());//获取按钮的文字 span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//讲倒计时时间显示为红色 setText(span); } @Override public void onFinish() { resetButton(); } }; countDownTimer.start(); } private void resetButton(){ setText(getResources().getString(R.string.count_down_m_recapture)); setEnabled(true);//重新获得点击 if (backColor != 0) { setBackColor(backColor);//还原背景色 } else { setBackColor(getResources().getColor(R.color.mainColor));//还原背景色 } } }

代码比较短,这里面继承了ButtonM,有不了解的可以看一下我之前的博客
Android自定义控件系列(一)—Button七十二变

全部代码已托管到开源中国的码云上,欢迎下载,地址:https://git.oschina.net/landptf/landptf.git

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

时间: 2024-10-12 16:22:09

Android自定义控件实现验证码倒计时的相关文章

Android&#8203;短信验证码倒计时验证的2种常用方式

前言 ​本文主要介绍的是短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用. 看图 计时器 说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的. 方法如下 1.第一种方式:Timer /** * Description:自定义Timer * <p> * Created by Mjj on 2016/12/4. */ public class TimeCount extends CountDownTimer { private Button button; //参数依次为总时

Android自定义View获取注册验证码倒计时按钮_Android

在Android开发中,我们不可避免的会做到注册功能,而现在的注册大多数都是用手机去注册的,那么注册的时候都会要求用获取验证码的方式去验证,我们接下来就来实战一下自定义获取验证码倒计时按钮: 1.先看效果图 2.我们涉及到的变量 //倒计时时长,可设置 /** * 倒计时时长,默认倒计时时间60秒: */ private long length = 60 * 1000; //在点击按钮之前按钮所显示的文字 /** * 在点击按钮之前按钮所显示的文字,默认是获取验证码 */ private Str

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

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

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

Android自定义控件深入学习 Android生成随机验证码_Android

在上一篇的文章中介绍了自定义控件的属性,详情见<详解Android自定义控件属性TypedArray以及attrs>.那么在这基础上实现随机验证码生成,里面的代码是自定义控件以及涉及到自定义view绘画.1.先看实现的效果图 看到这个效果图是不是感觉还可以.那么就看看源码吧.2.attr文件 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="

Android利用CountDownTimer实现验证码倒计时效果实例

前言 等待总是让人感到焦急和厌烦的,特别是看不到进展的等待.所以为了不让用户痴痴地等,我们在进行某些耗时操作时,一般都要设计一个进度条或者倒计时器,让进度可视化,告诉用户"等待之后更精彩".在使用短信验证码注册或者登录App就可以看到这样的设计:点击"发送验证码"的按钮之后,按钮上就会出现倒计时(一般为60秒),倒计时结束之后,按钮的文字就会变成"重新发送". 在Android中要实现这样的效果可以使用Handler发送消息,但其实还有一个已经封

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

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

Android自定义控件深入学习 Android生成随机验证码

在上一篇的文章中介绍了自定义控件的属性,详情见<详解Android自定义控件属性TypedArray以及attrs>.那么在这基础上实现随机验证码生成,里面的代码是自定义控件以及涉及到自定义view绘画. 1.先看实现的效果图 看到这个效果图是不是感觉还可以.那么就看看源码吧. 2.attr文件 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name=&qu

Android自定义View获取注册验证码倒计时按钮

在Android开发中,我们不可避免的会做到注册功能,而现在的注册大多数都是用手机去注册的,那么注册的时候都会要求用获取验证码的方式去验证,我们接下来就来实战一下自定义获取验证码倒计时按钮: 1.先看效果图 2.我们涉及到的变量 //倒计时时长,可设置 /** * 倒计时时长,默认倒计时时间60秒: */ private long length = 60 * 1000; //在点击按钮之前按钮所显示的文字 /** * 在点击按钮之前按钮所显示的文字,默认是获取验证码 */ private Str