全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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


# Android  # 验证码  # 倒计时  # Android使用属性动画如何自定义倒计时控件详解  # Android自定义DigitalClock控件实现商品倒计时  # Android自带倒计时控件Chronometer使用方法详解  # android倒计时控件示例  # android自定义倒计时控件示例  # Android仿Keep运动休息倒计时圆形控件  # 背景色  # 时长  # 这里面  # 我们可以  # 给大家  # 自定义  # 不了解  # 看一下  # 先看  # 中国  # 开源  # 大家多多  # 较短  # 几行  # 继承了  # 博客  # View  # onClick 


相关文章: 网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何在自有机房高效搭建专业网站?  建站主机SSH密钥生成步骤及常见问题解答?  ,网站推广常用方法?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  中山网站制作网页,中山新生登记系统登记流程?  Android自定义控件实现温度旋转按钮效果  如何用西部建站助手快速创建专业网站?  如何选择建站程序?包含哪些必备功能与类型?  如何选择适合PHP云建站的开源框架?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  建站之星导航如何优化提升用户体验?  如何在搬瓦工VPS快速搭建网站?  建站之星安装模板失败:服务器环境不兼容?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  建站主机默认首页配置指南:核心功能与访问路径优化  如何用wdcp快速搭建高效网站?  南平网站制作公司,2025年南平市事业单位报名时间?  建站主机选择指南:服务器配置与SEO优化实战技巧  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站制作员失业,怎样查看自己网站的注册者?  建站之星多图banner生成与模板自定义指南  长沙企业网站制作哪家好,长沙水业集团官方网站?  定制建站是什么?如何实现个性化需求?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  免费视频制作网站,更新又快又好的免费电影网站?  西安大型网站制作公司,西安招聘网站最好的是哪个?  建站主机选哪家性价比最高?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站制作公司排行榜,抖音怎样做个人官方网站  C#如何使用XPathNavigator高效查询XML  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何在企业微信快速生成手机电脑官网?  文字头像制作网站推荐软件,醒图能自动配文字吗?  一键网站制作软件,义乌购一件代发流程?  如何用PHP快速搭建CMS系统?  实例解析angularjs的filter过滤器  海南网站制作公司有哪些,海口网是哪家的?  北京制作网站的公司,北京铁路集团官方网站?  如何快速搭建安全的FTP站点?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  C#如何在一个XML文件中查找并替换文本内容  建站之星伪静态规则如何正确配置?  如何快速辨别茅台真假?关键步骤解析  如何用免费手机建站系统零基础打造专业网站?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。