这期内容当中小编将会给大家带来有关怎么在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中利用控件实现一个验证码倒计时功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。