文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android如何实现抢购倒计时功能

2023-06-14 07:51

关注

这篇文章将为大家详细讲解有关Android如何实现抢购倒计时功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、效果图

Android如何实现抢购倒计时功能

二、思路

算多少秒,秒数取余60,(满足分后剩下的秒数)
算多少分,秒数除60,再取余60 (总分数满足小时后剩下的分数)
算多少时,秒数除60,除60,再取余24 (总小时满足天后剩下的小时)
算多少天,秒数除60,除60,除24 等到的整数就是天数

三、实现步骤:

我们这里的时间格式为后台返回,格式为:

2021-12-24 00:00:00

1、时间转换的工具类

 //将年-月-天 时:分:秒转化为毫秒格式 public static long residueTimeout(String endDate, String newDate) throws ParseException {  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  Date d1 = df.parse(endDate);  Date d2 = df.parse(newDate);  long diff = d1.getTime() - d2.getTime();  return diff; }  public static String stampToDate(Long s) {  String res;  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  Date date = new Date(s);  res = simpleDateFormat.format(date);  return res; }

2、时间倒计时工具类

package com.sjl.keeplive.huawei;import android.os.CountDownTimer;public class CountDownTimerUtils {  public interface FinishDelegate {  void onFinish(); }  public interface TickDelegate {  void onTick(long pMillisUntilFinished); } private final static long ONE_SECOND = 1000;  private long mMillisInFuture = 0;  private long mCountDownInterval;  private FinishDelegate mFinishDelegate;  private TickDelegate mTickDelegate; private MyCountDownTimer mCountDownTimer;  public static CountDownTimerUtils getCountDownTimer() {  return new CountDownTimerUtils(); }  public CountDownTimerUtils setCountDownInterval(long pCountDownInterval) {  this.mCountDownInterval = pCountDownInterval;  return this; }  public CountDownTimerUtils setFinishDelegate(FinishDelegate pFinishDelegate) {  this.mFinishDelegate = pFinishDelegate;  return this; }  public CountDownTimerUtils setMillisInFuture(long pMillisInFuture) {  this.mMillisInFuture = pMillisInFuture;  return this; }  public CountDownTimerUtils setTickDelegate(TickDelegate pTickDelegate) {  this.mTickDelegate = pTickDelegate;  return this; } public void create() {  if (mCountDownTimer != null) {   mCountDownTimer.cancel();   mCountDownTimer = null;  }  if (mCountDownInterval <= 0) {   mCountDownInterval = mMillisInFuture + ONE_SECOND;  }  mCountDownTimer = new MyCountDownTimer(mMillisInFuture, mCountDownInterval);  mCountDownTimer.setTickDelegate(mTickDelegate);  mCountDownTimer.setFinishDelegate(mFinishDelegate); }  public void start() {  if (mCountDownTimer == null) {   create();  }  mCountDownTimer.start(); }  public void cancel() {  if (mCountDownTimer != null) {   mCountDownTimer.cancel();  } } private static class MyCountDownTimer extends CountDownTimer {  private FinishDelegate mFinishDelegate;  private TickDelegate mTickDelegate;    public MyCountDownTimer(long millisInFuture, long countDownInterval) {   super(millisInFuture, countDownInterval);  }  @Override  public void onTick(long millisUntilFinished) {   if (mTickDelegate != null) {    mTickDelegate.onTick(millisUntilFinished);   }  }  @Override  public void onFinish() {   if (mFinishDelegate != null) {    mFinishDelegate.onFinish();   }  }  void setFinishDelegate(FinishDelegate pFinishDelegate) {   this.mFinishDelegate = pFinishDelegate;  }  void setTickDelegate(TickDelegate pTickDelegate) {   this.mTickDelegate = pTickDelegate;  } }}

3、布局文件

 <LinearLayout  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center"  android:orientation="horizontal">  <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="抢购倒计时:" />  <TextView   android:id="@+id/text_day"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="#ff0000"   android:padding="5dp"   android:text="00" />  <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text=" 天 " />  <TextView   android:id="@+id/text_hour"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="#ff0000"   android:padding="5dp"   android:text="00" />  <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text=" 时 " />  <TextView   android:id="@+id/text_minute"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="#ff0000"   android:padding="5dp"   android:text="00" />  <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text=" 分 " />  <TextView   android:id="@+id/text_second"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="#ff0000"   android:padding="5dp"   android:text="00" />  <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text=" 秒 " /> </LinearLayout>

4、倒计时显示处理

 public static void liveDescCountTime(long ms, TextView tvDays, TextView tvHour, TextView tvMinutes, TextView tvSeconds) {  long totalSeconds = ms / 1000;  long seconds = totalSeconds % 60;  long minutes = totalSeconds / 60 % 60;  long hours = totalSeconds / 60 / 60 % 24;  long days = totalSeconds / 60 / 60 / 24;  String dayStr = "";  if (days > 0) {   if (days > 9) {    dayStr += days + "";   } else if (days > 0) {    dayStr += "0" + days + "";   } else {    dayStr += "00";   }  } else {   dayStr = "00";  }  tvDays.setText(dayStr);  String hourStr = "";  if (hours > 0) {   if (hours > 9) {    hourStr += hours + "";   } else if (hours > 0) {    hourStr += "0" + hours + "";   } else {    hourStr += "00";   }  } else {   hourStr = "00";  }  tvHour.setText(hourStr);  String minutesStr = "";  if (minutes > 0) {   if (minutes > 9) {    minutesStr += minutes + "";   } else if (minutes > 0) {    minutesStr += "0" + minutes + "";   } else {    minutesStr += "00";   }  } else {   minutesStr = "00";  }  tvMinutes.setText(minutesStr);  String secondStr = "";  if (minutes > 0) {   if (seconds > 9) {    secondStr += seconds;   } else if (seconds > 0) {    secondStr += "0" + seconds;   } else {    secondStr += "00";   }  } else {   secondStr = "00";  }  tvSeconds.setText(secondStr); }

5、开始倒计时

        final TextView text_day = findViewById(R.id.text_day);  final TextView text_hour = findViewById(R.id.text_hour);  final TextView text_minute = findViewById(R.id.text_minute);  final TextView text_second = findViewById(R.id.text_second);  long residueTime = 0;        //获取当前时间  String stampToDate = stampToDate(System.currentTimeMillis());  try {            //2021-12-24 00:00:00为模拟倒计时间数据   residueTime = residueTimeout("2021-12-24 00:00:00", stampToDate);  } catch (ParseException e) {   e.printStackTrace();  }        //倒计时  CountDownTimerUtils.getCountDownTimer()    .setMillisInFuture(residueTime)    .setCountDownInterval(1000)    .setTickDelegate(new CountDownTimerUtils.TickDelegate() {     @Override     public void onTick(long pMillisUntilFinished) {      liveDescCountTime(pMillisUntilFinished, text_day, text_hour, text_minute, text_second);     }    })    .setFinishDelegate(new CountDownTimerUtils.FinishDelegate() {     @Override     public void onFinish() {      //倒计时完成后处理     }    }).start();

关于“Android如何实现抢购倒计时功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯