大佬教程收集整理的这篇文章主要介绍了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(); } }); }
以上几行代码即可实现倒计时的@L_197_5@,这里面我们可以设置背景色以及倒计时的总时长。
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,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),Convertm.dp2px(context,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),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自定义控件实现验证码倒计时所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。