为了账号安全,请及时绑定邮箱和手机立即绑定

创建相对于当前实时时间的倒计时器?

创建相对于当前实时时间的倒计时器?

泛舟湖上清波郎朗 2023-08-23 17:04:26
我正在尝试创建一个倒计时,显示一天中剩余的当前时间,如下所示的布局,因此有 3 个 TextViews ID 分别是天、小时、分钟如何获取当前剩余时间并将其显示在文本视图中?但也允许计时器在一天中的任意时间开始,因此 24 小时开始时间可以从午夜开始,因此上午 10 点的计时器经过时间将显示还剩 14 小时,或者 24 小时时间从早上 6 点开始,因此计时器上午 10 点将显示还剩 18 小时。如果有人知道如何做到这一切,那么从午夜开始然后以某种方式在代码中添加 3 个小时会更容易吗?@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    int timeinminutes = 1;    sSlUp = findViewById(R.id.redtimeerview);    //final TextView hours = (TextView)findViewById(R.id.hours);    countDownTimer = new CountDownTimer(timeinminutes * 60000, 1000) {        TextView countdownText = findViewById(R.id.countdown_text);        public void onTick(long millisUntilFinished) {            long scnds = 1;            scnds = (millisUntilFinished / 1000);            countdownText.setText("" + scnds);        }        public void onFinish() {            countDownTimer.start();        }    }.start();    init();    progressBar.setVisibility(View.VISIBLE);    mTextureView = (TextureView) findViewById(R.id.previewCam);    mBtLaunchActivity = (Button) findViewById(R.id.bt_launch_activity);    TextView textView = (TextView) findViewById(R.id.currentDate);    setDate(textView);    mBtLaunchActivity.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            launchActivity();        }    });
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

根据要求,这里是一次尝试。请注意,该答案尚未经过测试。


所有与 不相关的数据Time均已被删除。


int timeInMinutes = 1;


    countDownTimer = new CountDownTimer(timeInMinutes * 60000, 1000) {


        public void onTick(long millisUntilFinished) {

            Time time = new Time(millisUntilFinished);


            final int hours = time.getHours();

            final int min = time.getMinutes();

            final int scnds = time.getSeconds();


            countdownText.setText("" + scnds);

        }


        public void onFinish() {

            // Everytime the countDown stops restart it?

            //countDownTimer.start();

        }

    }.start();


查看完整回答
反对 回复 2023-08-23
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

我相信这让我走上了正确的轨道,虽然它显然不正确,因为 .getHours 和 .getMinutes 显然自 api 14 以来已经贬值了。我发现我可以进行比较,然后根据时间进行设置


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    int timeinminutes = 1;


    countDownTimer = new CountDownTimer(timeinminutes * 60000, 1000) {

        public void onTick(long millisUntilFinished) {


            Time time = new Time(millisUntilFinished);


            final int hours = time.compareTo(Calendar.getInstance().getTime()); //added a compareto and set that against what the current time is

            final int min = time.getMinutes();

            //final int scnds = time.getSeconds();

            long scnds = 1;

            scnds = (millisUntilFinished / 1000);

            countdownText.setText("" + scnds);

            countdownHours.setText("" +hours); // sets to ID of textview

        }


        public void onFinish() {

            countDownTimer.start();

        }

    }.start();

当我测试它时,它说 1 小时(当前时间是 22:54),所以我确定它是正确的,但我必须明天检查。但谢谢你给我指明了正确的方向 :D 我现在需要做的就是弄清楚如何抵消时间,所以目前应该是 4 小时


查看完整回答
反对 回复 2023-08-23
?
holdtom

TA贡献1805条经验 获得超10个赞

从互联网上搜索了很多之后,我无法获得任何内置功能。也许有任何功能,但对我来说,我习惯做这样的代码,它确实对我有用。只需复制粘贴它并根据您的文本视图设置timerTV。


  var cT: CountDownTimer? = null


  fun timer() {

    val calendar = Calendar.getInstance()

    calendar.time

    Log.d("Current time: ", calendar.time.toString())


    val hourCurrent = calendar.get(Calendar.HOUR)

    val minutCurrent = calendar.get(Calendar.MINUTE)

    val secondCurrent = calendar.get(Calendar.SECOND)

    

    var hourSub = 24 - hourCurrent

    var minSub = 60 - minutCurrent

    var secSub = 60 - secondCurrent



    cT = object : CountDownTimer(1000, 1000) {

        override fun onTick(millisUntilFinished: Long) {


            timerTV.setText("$hourSub:$minSub:$secSub")


        }


        override fun onFinish() {

            timer()

        }

    }

    cT?.start()

}


override fun onDestroy() {

    super.onDestroy()

    cT?.cancel()

}


查看完整回答
反对 回复 2023-08-23
  • 3 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信