这期内容当中小编将会给大家带来有关怎么在Android中利用控件实现一个验证码倒计时功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
使用方式
<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(); } }); }
以上几行代码即可实现倒计时的功能,这里面我们可以设置背景色以及倒计时的总时长。
实现方法
/** * 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));//还原背景色 } } }
上述就是小编为大家分享的怎么在Android中利用控件实现一个验证码倒计时功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。