Android发送验证码倒计时,时间倒计时

举报
yechaoa 发表于 2022/05/31 00:24:34 2022/05/31
【摘要】     1.activity_main.xml <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns...

   

1.activity_main.xml


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:id="@+id/activity_main"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:padding="@dimen/activity_vertical_margin"
  8. tools:context="com.example.yechaoa.timedemo.MainActivity">
  9. <TextView
  10. android:textColor="#fff"
  11. android:padding="10dp"
  12. android:background="#f60"
  13. android:id="@+id/tv_time"
  14. android:gravity="center"
  15. android:layout_width="160dp"
  16. android:layout_height="wrap_content"
  17. android:text="Hello World!" />
  18. </RelativeLayout>



  
  1. package com.example.yechaoa.timedemo;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.TextView;
  6. public class MainActivity extends AppCompatActivity {
  7. private TextView tvTime;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. tvTime = (TextView) findViewById(R.id.tv_time);
  13. tvTime.setOnClickListener(new View.OnClickListener() {
  14. @Override
  15. public void onClick(View v) {
  16. /**
  17. * 1.上下文
  18. * 2.总时间
  19. * 3.计时单位
  20. * 4.控件对象
  21. */
  22. //验证码倒计时
  23. TimeLastUtil timeLastUtil = new TimeLastUtil(MainActivity.this, 60000, 1000, tvTime);
  24. timeLastUtil.start();
  25. //根据指定时间,两小时倒计时
  26. /*long waitTime = TimeLastUtil.getRemainderTime("2017-03-17 12:20:00");//指定时间,根据需求传入时间
  27. TimeLastUtil timeLastUtil = new TimeLastUtil(MainActivity.this, waitTime, 1000, tvTime);
  28. timeLastUtil.setType(1);
  29. timeLastUtil.start();*/
  30. }
  31. });
  32. }
  33. }




  
  1. package com.example.yechaoa.timedemo;
  2. import android.annotation.SuppressLint;
  3. import android.content.Context;
  4. import android.graphics.Color;
  5. import android.os.CountDownTimer;
  6. import android.text.Spannable;
  7. import android.text.SpannableString;
  8. import android.text.style.ForegroundColorSpan;
  9. import android.widget.TextView;
  10. import java.text.ParseException;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. /**
  14. * Created by yechaoa on 2016/11/11.
  15. */
  16. public class TimeLastUtil extends CountDownTimer {
  17. private Context mActivity;
  18. private TextView btn;
  19. private int type = 0;
  20. /**
  21. * 1.上下文
  22. * 2.总时间
  23. * 3.计时单位
  24. * 4.控件对象
  25. */
  26. public TimeLastUtil(Context mActivity, long millisInFuture, long countDownInterval, TextView btn) {
  27. super(millisInFuture, countDownInterval);
  28. this.mActivity = mActivity;
  29. this.btn = btn;
  30. }
  31. /**
  32. * 根据设置的间隔时间循环调用
  33. * @param millisUntilFinished
  34. */
  35. private int length;
  36. @Override
  37. public void onTick(long millisUntilFinished) {
  38. if (type == 1) {
  39. int mi = 1000 * 60;
  40. //计算分钟
  41. long minute = millisUntilFinished / mi;
  42. //总时间-分钟的毫秒数得到秒数
  43. long second = (millisUntilFinished - minute * mi) / 1000;
  44. //计算小时
  45. long hour = minute / 60;
  46. long showMinute = minute - hour * 60;
  47. String strHour = hour < 10 ? "0" + hour : "" + hour;
  48. //分
  49. String strMinute = minute < 10 ? "0" + showMinute : "" + showMinute;
  50. //秒
  51. String strSecond = second < 10 ? "0" + second : "" + second;
  52. // 设置倒计时时间
  53. btn.setText("倒计时:" + strHour + ":" + strMinute + ":" + strSecond);
  54. } else {
  55. // 设置背景为灰色,这时是不能点击的
  56. btn.setClickable(false);
  57. btn.setBackgroundColor(Color.GRAY);
  58. // 设置倒计时时间
  59. btn.setText(millisUntilFinished / 1000 + "s后重新获取");
  60. // 获取按钮的文字
  61. Spannable span = new SpannableString(btn.getText().toString());
  62. if(millisUntilFinished / 1000>9){
  63. length=2;
  64. }else{
  65. length=1;
  66. }
  67. // 将倒计时时间显示为红色
  68. span.setSpan(new ForegroundColorSpan(Color.RED), 0, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
  69. btn.setText(span);
  70. }
  71. }
  72. /**
  73. * 结束时调用
  74. */
  75. @SuppressLint("NewApi")
  76. @Override
  77. public void onFinish() {
  78. if (type == 1) {//两小时倒计时
  79. btn.setText("倒计时结束");
  80. btn.setTextColor(Color.WHITE);
  81. btn.setEnabled(false);
  82. } else {//验证码倒计时
  83. btn.setText("重新获取验证码");
  84. btn.setClickable(true);
  85. // 还原背景色
  86. btn.setBackgroundColor(Color.parseColor("#ff6600"));
  87. }
  88. }
  89. /**
  90. * 设置类型
  91. * @param mType
  92. */
  93. public void setType(int mType) {
  94. this.type = mType;
  95. }
  96. /**
  97. * 根据指定时间进行两小时倒计时
  98. * @param insertTime
  99. * @return
  100. */
  101. public static long getRemainderTime(String insertTime) {
  102. long waitTime = 0;
  103. //时间格式化
  104. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  105. //获取当前时间
  106. Date curDate = new Date(System.currentTimeMillis());
  107. String date1 = sdf.format(curDate);
  108. try {
  109. Date d1 = sdf.parse(date1);
  110. Date d2 = sdf.parse(insertTime);
  111. /**
  112. * 当前时间 - 指定的时间 = 已经过去的时间
  113. * 两小时 - 过去的时间 = 开始计时的时间
  114. */
  115. waitTime = (2 * 60 * 60 * 1000) - (d1.getTime() - d2.getTime());
  116. } catch (ParseException e) {
  117. e.printStackTrace();
  118. }
  119. return waitTime;
  120. }
  121. }


Demo地址:https://github.com/yechaoa/TimeDemo



文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yechaoa/article/details/62884722

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。