效果图:

封装好的工具类:TimeUtils.java

package com.xiao7.pump.Utils;import android.os.Handler;import android.os.Message;import android.widget.TextView;import java.util.Timer;import java.util.TimerTask;public class TimeUtils {    /*倒计时时长  单位:秒*/    public static int COUNT = 20*60;    /*当前做*/    private static int CURR_COUNT = 0;    /*预计结束的时间*/    private static long TIME_END = 0;    /*计时器*/    private static Timer countdownTimer;    /*显示倒计时的textView*/    private static TextView txtCountdown;    /**     * 开始倒计时     * @param isFirst 标识是否是第一次进入     * @param second 倒计时时长  单位:秒     * @param textView 显示倒计时的textView     */    public static void startCountdown(boolean isFirst,int second,TextView textView) {        COUNT = second;        long data = System.currentTimeMillis();        long time = TIME_END;        //第一次进入时,重新赋值        if(isFirst){            CURR_COUNT = COUNT;            time = data + COUNT * 1000;            TIME_END = time;        }else {            int the_difference = ((int) (time - data)) / 1000;            CURR_COUNT = the_difference;        }        //开始倒计时        txtCountdown = textView;        if (countdownTimer == null) {            countdownTimer = new Timer();            countdownTimer.schedule(new TimerTask() {                @Override                public void run() {                    Message msg = new Message();                    msg.what = CURR_COUNT--;                    handler.sendMessage(msg);                }            }, 0, 1000);            //第二个参数delay:"0"的意思是:无延迟            //第三个参数period:"1000"的意思是:每隔多长时间调用一次(单位毫秒)        }    }    /**     * 结束倒计时     */    public static void stopCountdown() {        //发送消息,结束倒计时        Message message = new Message();        message.what = 0;        handler.sendMessage(message);    }    private static Handler handler = new Handler() {        public void handleMessage(Message msg) {            if (msg.what <= 0) {                if (countdownTimer != null) {                    countdownTimer.cancel();                    countdownTimer = null;                }                txtCountdown.setText("剩余:00:00:00");                txtCountdown.setEnabled(true);            } else {                //倒计时效果展示                String txtTime = formatSecondTime(msg.what);                txtCountdown.setText(txtTime);                txtCountdown.setEnabled(false);            }            super.handleMessage(msg);        }    };        /**     * 时间格式化方法     * @param second 秒数     * @return     */    private static String formatSecondTime(int second) {        int hour = 0;        int minute = 0;        if (second > 60) {            minute = second / 60;   //取整            second = second % 60;   //取余        }        if (minute > 60) {            hour = minute / 60;            minute = minute % 60;        }        String strtime = "剩余:"+hour+"小时"+minute+"分"+second+"秒";        return strtime;    }}

 TimeUtils调用方式:

//在启动倒计时的按钮上buttonStart.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        //假设倒计20分钟        int secondTime=20*60;        //倒计时           TimeUtils.startCountdown(true,secondTime,txtCountDown);        //第一个参数为true,表示刚启动倒计时(第一次)    }});

 活动的生命周期onRestart()上重新调用,如下:

@Overrideprotected void onRestart() {    super.onRestart();    TimeUtils.startCountdown(false,secondTime,txtCountDown);    //第一个参数为false,表示非第一次启用,倒计时正在运行中}

 

更多相关文章

  1. Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)
  2. 在启动activity之前,调用application的oncreate
  3. Android(安卓)如何让程序定时进行消息通知到通知栏
  4. android经常调用的组件
  5. android LayoutInflater.inflate()的参数及其功能
  6. Android(安卓)VelocityTracker使用总结
  7. 防止Android点击按钮过快造成多次事件实现原理
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. Python技巧匿名函数、回调函数和高阶函数

随机推荐

  1. 【等待事件】日志类 等待事件(4.5)--log fi
  2. 【等待事件】日志类 等待事件(4.4)--log bu
  3. 【等待事件】System I/O类 等待事件(3.1)--
  4. netfilter与iptables表规则建立
  5. BRCM5.02编译三 : Error: Could not retre
  6. 【故障处理】DG环境主库丢失归档情况下数
  7. BRCM5.02编译四: ERROR: lzo/lzo1x.h deve
  8. 【故障处理】队列等待之enq: US - conten
  9. 【故障处理】DG环境主库丢失归档情况下数
  10. BRCM5.02编译二:Error: Could not retreiv