【问题标题】:Countdown Timer not counting correctly倒数计时器未正确计数
【发布时间】:2018-02-21 10:41:06
【问题描述】:

当我暂停计时器然后再次启动它时,计时器似乎再次计算当前秒数。例如,它是 00:10,半秒后我停止计时器,当我再次启动它而不是在半秒内从 00:10 到 00:09 时,它计数了一整秒。我找不到问题所在。感谢您的帮助。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_2);   
    //...
     Timer buttonTimer = new Timer();
     buttonTimer.schedule(new TimerTask() {
          @Override
           public void run() {
            runOnUiThread(new Runnable() {                            
            if (timer_2_up_running) {
                pausetimer_2_up();
                starttimer_2_down();

            } else {
                starttimer_2_up();
                if (timer_2_down_running) {
                    pausetimer_2_down(); 


private void starttimer_2_up() {
    timer_2_up_countdowntimer = new CountDownTimer(starttimeup, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            starttimeup = millisUntilFinished;
            update_up_text();          

        @Override
        public void onFinish() {
            timer_2_up_running = false;

        }
    }.start();

    timer_2_up_running = true;
}

private void starttimer_2_down() {
    timer_2_down_countdowntimer = new CountDownTimer(starttimedown, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            starttimedown = millisUntilFinished;
            update_down_text();

        }

        @Override
        public void onFinish() {
            timer_2_down_running = false;

        }
    }.start();

    timer_2_down_running = true;
}

private void pausetimer_2_up() {
    timer_2_up_countdowntimer.cancel();
    timer_2_up_running = false;
}

private void pausetimer_2_down() {
    timer_2_down_countdowntimer.cancel();
    timer_2_down_running = false;
}

private void update_up_text() {
    int minutes_up = (int) (starttimeup / 1000) / 60;
    int seconds_up = (int) (starttimeup / 1000) % 60;
    String time_2_up_left_formatted = String.format(Locale.getDefault(), "%02d:%02d", minutes_up, seconds_up);
    timer_2_up.setText(time_2_up_left_formatted);
}

private void update_down_text() {
    int minutes_down = (int) (starttimedown / 1000) / 60;
    int seconds_down = (int) (starttimedown / 1000) % 60;
    String time_2_down_left_formatted = String.format(Locale.getDefault(), "%02d:%02d", minutes_down, seconds_down);
    timer_2_down.setText(time_2_down_left_formatted);
}

【问题讨论】:

    标签: java android timer countdown


    【解决方案1】:

    您可以使用 Chronometer 来显示录制时间。开始 记录时计时器开始,记录停止时停止

    <Chronometer
            android:id="@+id/chronometerRecordTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/relativeLayout_bottom_video_controls"
            android:layout_centerInParent="true"
            android:layout_marginBottom="20dp"
            android:visibility="invisible"/>
    
    
    private Chronometer chronometerRecordTime;
    
    chronometerRecordTime = findViewById(R.id.chronometerRecordTime);
    
    chronometerRecordTime.setBase(SystemClock.elapsedRealtime()); // Reset
    chronometerRecordTime.start(); // start
    
    chronometerRecordTime.stop(); // stop
    

    【讨论】:

    • 你能再解释一下吗
    • 在计时器的帮助下,我们可以在 UI 上显示计时器,我在我的一个应用程序上使用它来显示记录时间,它会自动获取更新,我们只需要启动、停止和重置它。以下链接对其进行了更多解释。 abhiandroid.com/ui/chronometer
    • 问题是我希望它倒数,从开始时间到 0
    • 这对于chronometer是不可能的,它从0开始,我们需要停止它,
    • 有没有其他不使用计时器的方法可以解决我的问题?
    【解决方案2】:

    我也有板条箱计时器在一分钟后停止录制。你可以 根据您的要求进行修改。

        int myTimeCounter;
        Timer myRecordingTimer;
        private boolean myTimerHasStarted = false;
        private String TAG = "Log";
        private void startTimerTask() {
            myTimeCounter = 1;
            myRecordingTimer = new Timer();
            myRecordingTimer.scheduleAtFixedRate(new TimerTask() {
                public void run() {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            myTimerHasStarted = true;
                            if (myTimeCounter == 60) {
                                myRecordingTimer.cancel();
                                myTimerHasStarted = false;
                                return;
                            }
                            Log.d(TAG, "timer=" + String.valueOf(myTimeCounter));
                            myTimeCounter++;
                        }
                    });
                }
            }, 0, 1000);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多