Android封装实现短信验证码的获取倒计时
作者:萌动小彩笔 时间:2023-06-28 22:57:23
如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用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>
下面是实现的具体代码,很简单的一种方式,通俗易懂:
/**
* Created by xiaolong on 2018/1/12.
*/
@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
的使用练习,之前工作中一直没有接触过这个类。
来源:https://blog.csdn.net/zl_china/article/details/79085093
标签:Android,封装,倒计时,短信
0
投稿
猜你喜欢
SpringBoot 使用Mybatis分页插件实现详解
2023-03-06 22:34:19
C#中datatable序列化与反序列化实例分析
2021-10-13 10:53:06
Android Build Variants 为项目设置变种版本的方法
2023-04-26 10:29:07
java实现推箱子小游戏
2023-02-09 04:57:52
javascript checkbox全选和反选的简单实现
2022-08-31 14:16:32
简单谈谈java自定义注解
2021-07-21 18:40:53
Java中的length和length()深入分析
2022-01-23 06:33:01
spring如何动态指定具体实现类
2022-04-13 07:52:21
C#中缓存的基本使用方法
2023-02-23 13:47:44
轻松实现Android语音识别功能
2022-09-11 17:42:46
Spring ApplicationListener监听器用法详解
2022-08-21 00:00:08
Android 自定义阴影效果详解及实例
2022-11-22 01:40:24
idea 实现搜索jdk中的类和包操作
2022-06-02 22:54:47
Java中十进制和十六进制的相互转换方法
2022-04-21 11:54:06
Spring Boot配置AOP打印日志的全过程
2023-08-07 12:56:38
springBoot加入thymeleaf模板的方式
2023-11-25 14:31:23
Java初学者问题图解(动力节点Java学院整理)
2023-10-15 18:06:11
C#将图片和字节流互相转换并显示到页面上
2021-08-18 23:41:31
ZooKeeper入门教程一简介与核心概念
2022-11-24 18:36:00
Java线程池高频面试题总结
2023-10-22 02:12:34