Android封装实现短信验证码的获取倒计时
短信预约 -IT技能 免费直播动态提醒
如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用CountDownTimer
定时器简单封装下此效果,方便我们随时调用。
首页先在attrs.xml
中定义下所需的几个属性:
<resources>
<declare-styleable name="CountDownButton">
<attr name="millisinfuture" format="integer"/>
<attr name="countdowninterva" format="integer"/>
<attr name="normalColor" format="color"/>
<attr name="countDownColor" format="color"/>
</declare-styleable>
</resources>
下面是实现的具体代码,很简单的一种方式,通俗易懂:
@SuppressLint("AppCompatCustomView")
public class CountDownButton extends Button{
//总时长
private long millisinfuture;
//间隔时长
private long countdowninterva;
//默认背景颜色
private int normalColor;
//倒计时 背景颜色
private int countDownColor;
//是否结束
private boolean isFinish;
//定时器
private CountDownTimer countDownTimer;
public CountDownButton(Context context) {
this(context,null);
}
public CountDownButton(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CountDownButton,defStyleAttr,0);
//设置默认时长
millisinfuture = (long) typedArray.getInt(R.styleable.CountDownButton_millisinfuture,60000);
//设置默认间隔时长
countdowninterva = (long)typedArray.getInt(R.styleable.CountDownButton_countdowninterva,1000);
//设置默认背景色
normalColor = typedArray.getColor(R.styleable.CountDownButton_normalColor,android.R.color.holo_blue_light);
//设置默认倒计时 背景色
countDownColor = typedArray.getColor(R.styleable.CountDownButton_countDownColor,android.R.color.darker_gray);
typedArray.recycle();
//默认为已结束状态
isFinish = true;
//字体居中
setGravity(Gravity.CENTER);
//默认文字和背景色
normalBackground();
//设置定时器
countDownTimer = new CountDownTimer(millisinfuture, countdowninterva) {
@Override
public void onTick(long millisUntilFinished) {
//未结束
isFinish = false;
setText((Math.round((double) millisUntilFinished / 1000) - 1) + "秒");
setBackgroundResource(countDownColor);
}
@Override
public void onFinish() {
//结束
isFinish = true;
normalBackground();
}
};
}
private void normalBackground(){
setText("获取验证码");
setBackgroundResource(normalColor);
}
public boolean isFinish() {
return isFinish;
}
public void cancel(){
countDownTimer.cancel();
}
public void start(){
countDownTimer.start();
}
}
一个简单的调用方式:
public class MainActivity extends AppCompatActivity {
private CountDownButton countDownButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countDownButton = ((CountDownButton) findViewById(R.id.countDownButton));
countDownButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//这里判断是否倒计时结束,避免在倒计时时多次点击导致重复请求接口
if (countDownButton.isFinish()) {
//发送验证码请求成功后调用
countDownButton.start();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (!countDownButton.isFinish()) {
countDownButton.cancel();
}
}
}
这样一个简单的封装就结束了,过程很简单。这里主要是对CountDownTimer
的使用练习,之前工作中一直没有接触过这个类。传送门
到此这篇关于Android封装实现短信验证码的获取倒计时的文章就介绍到这了,更多相关Android封装倒计时内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341