Android实现时分秒倒计时

在界面中实现时分秒倒计时

 

主要是将剩余时间转换为时分秒的字符串

    public  String secondConvertHourMinSecond(Long second) {
        String str = "00:00:00";
        if (second == null || second < 0) {
            return str;
        }

        // 得到小时
        long h = second / 3600;
        str = h > 0 ? ((h < 10 ? ("0" + h) : h) + ":") : "00:";

        // 得到分钟
        long m = (second % 3600) / 60;
        str += (m < 10 ? ("0" + m) : m) + ":";

        //得到剩余秒
        long s = second % 60;
        str += (s < 10 ? ("0" + s) : s);
        return str;
    }

再启动一个Timer来刷新页面就行。

package com.adse.open.android.timedemo;

import android.os.Handler;
import android.os.Message;

import java.lang.ref.WeakReference;
import java.util.Timer;
import java.util.TimerTask;

public class TimerUtil {
    private static final int nHandlerMsg = 23566124;

    private int nStartDelayTime;
    private int nIntervalTime;

    private Timer mTimer;
    private TimerTask mTimeTask;
    private Handler mHandler;
    private OnTimerChangeListener onTimerChangeListener;

    public TimerUtil(int nStartDelayTime, int nIntervalTime, OnTimerChangeListener onTimerChangeListener) {
        this.nStartDelayTime = nStartDelayTime;
        this.nIntervalTime = nIntervalTime;
        this.onTimerChangeListener = onTimerChangeListener;
    }

    /**
     * 计时器开始
     */
    public void timeStart() {
        timeStop();
        mHandler = new TimeHandler(this);
        mTimeTask = new TimerTask() {

            @Override
            public void run() {
                if (mHandler != null)
                    mHandler.obtainMessage(nHandlerMsg).sendToTarget();
            }
        };
        mTimer = new Timer();
        mTimer.schedule(mTimeTask, nStartDelayTime, nIntervalTime);
    }

    /**
     * 停止计时器
     */
    public void timeStop() {
        if (mTimer != null)
            mTimer.cancel();
        if (mTimeTask != null)
            mTimeTask.cancel();
        mTimeTask = null;
        mHandler = null;
        mTimer = null;
    }

    private void doTimeChange() {
        if (onTimerChangeListener != null)
            onTimerChangeListener.doChange();
    }

    private static class TimeHandler extends Handler {
        WeakReference<TimerUtil> weakReference;

        public TimeHandler(TimerUtil timerUtil) {
            weakReference = new WeakReference<>(timerUtil);
        }

        @Override
        public void handleMessage(Message msg) {
            TimerUtil timerUtil = weakReference.get();
            if (msg.what == nHandlerMsg)
                timerUtil.doTimeChange();

            super.handleMessage(msg);
        }
    }


    public interface OnTimerChangeListener {
        void doChange();
    }

    public  String secondConvertHourMinSecond(Long second) {
        String str = "00:00:00";
        if (second == null || second < 0) {
            return str;
        }

        // 得到小时
        long h = second / 3600;
        str = h > 0 ? ((h < 10 ? ("0" + h) : h) + ":") : "00:";

        // 得到分钟
        long m = (second % 3600) / 60;
        str += (m < 10 ? ("0" + m) : m) + ":";

        //得到剩余秒
        long s = second % 60;
        str += (s < 10 ? ("0" + s) : s);
        return str;
    }
}

使用

package com.adse.open.android.timedemo;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;

import java.util.Observable;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;

public class MainActivity extends AppCompatActivity {
    private String TAG = "MainActivity";
    private Context mContext;
    private TextView mTvTime;
    private Button mBtnStart;
    private Button mBtnEnd;
    private TimerUtil timerUtil;


    private final long COUNT_TIME = 1*60;//计时总数,单位/秒
    private long currConnTimes = COUNT_TIME;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initTimerUtil();
        mContext = this;
        mTvTime = findViewById(R.id.tv_time);
        mBtnStart = findViewById(R.id.btn_start);
        mBtnEnd = findViewById(R.id.btn_end);


        mBtnStart.setOnClickListener(v -> {
            timerUtil.timeStart();
        });
        mBtnEnd.setOnClickListener(v -> {
            timerUtil.timeStop();

        });

    }
    
    private void initTimerUtil() {
        TimerUtil.OnTimerChangeListener onTimerChangeListener = new TimerUtil.OnTimerChangeListener() {
            @Override
            public void doChange() {
                currConnTimes --;
                if (currConnTimes <= 0){
                    currConnTimes = COUNT_TIME;
                }
                mTvTime.setText(timerUtil.secondConvertHourMinSecond(currConnTimes));
            }
        };
        timerUtil = new TimerUtil(0, 1000, onTimerChangeListener);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        timerUtil.timeStop();
    }
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想要了解如何用Vue3实现时分秒倒计时功能。这可以通过以下步骤来完成: 1. 创建一个组件或页面,并在组件或页面中定义计时器需要用到的状态,如hours, minutes, seconds和isCountingDown等状态。 2. 在生命周期函数中启动计时器,例如在mounted钩子函数中使用setInterval函数定时更新状态中的hours、minutes和seconds数值。 3. 添加显示组件或页面,以显示倒计时,并在页面或组件的模板中绑定状态数据。 4. 创建倒计时方法,使其在用户输入倒计时时间后启动,并在倒计时过程中修改状态,例如计时器到达00:00:00时,自动结束计时。 下面是一个简单的示例代码: ``` <template> <div class="countdown-timer"> <div>{{ formattedTime }}</div> <button @click="toggleCountdown">{{ isCountingDown ? 'Stop' : 'Start' }}</button> </div> </template> <script> import { reactive } from 'vue' export default { name: 'CountdownTimer', setup() { const state = reactive({ hours: 0, minutes: 0, seconds: 0, isCountingDown: false, countdownTimer: null, }) const formatTime = (time) => (time < 10 ? `0${time}` : time) const countdown = () => { if (state.seconds === 0) { if (state.minutes === 0) { if (state.hours === 0) { clearInterval(state.countdownTimer) state.isCountingDown = false // Do something when countdown is completed } else { state.hours-- state.minutes = 59 state.seconds = 59 } } else { state.minutes-- state.seconds = 59 } } else { state.seconds-- } } const toggleCountdown = () => { if (!state.isCountingDown) { state.countdownTimer = setInterval(countdown, 1000) state.isCountingDown = true } else { clearInterval(state.countdownTimer) state.isCountingDown = false } } const formattedTime = computed(() => { const { hours, minutes, seconds } = state return `${formatTime(hours)}:${formatTime(minutes)}:${formatTime(seconds)}` }) return { state, formattedTime, toggleCountdown, } }, } </script> ``` 在这个代码示例中,我们使用Vue3的reactive函数定义计时器需要用到的状态,以及countdown方法和toggleCountdown方法。在组件或页面的模板中,我们绑定了formattedTime计算属性和toggleCountdown方法,使用户可以启动或停止倒计时。 总的来说,实现一个简单的时分秒倒计时功能并不复杂,只需要通过定义状态、创建计时器和绑定模板的方式来完成即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值