时间:2021-05-21
效果如下图所示:
如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用 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 的使用练习,之前工作中一直没有接触过这个类。顺便贴上源码吧!
总结
以上所述是小编给大家介绍的Android 简单封装获取验证码倒计时功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、功能描述 当用户想要获取验证码时,就点击免费获取验证码,然后开始倒计时,倒计时期间按钮文字为剩余时间x秒,且不可按状态,倒计时结束后,按钮更改为点击重新发
我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取,为了方便以后使用,这里做个记录,讲讲倒计时器的实现。1、先进行倒计时工具类的
目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮背景变
倒计时功能是一个比较常见的功能,比如用户获取验证码就需要用到。这里记录一下在微信小程序里面倒计时功能的简单实现。直接看看代码吧//倒计时60秒functionc
相关阅读:基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)下面一段代码是小编给大家带来的js发送短信验证码后实现倒计时功能,代码简单易懂。具体代