Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get remaining time on CountdownTimer and use the remaining time as a score android

So i have here Quiz App and have timer. So what i want to happen for example i have set the timer for 15 seconds and if the user answer the question in 5 seconds i want the 10 seconds ramaining become 10 points and it will add to previous score plus the score of you will get upon answering the questions. so for now i have this ...

        if(savedInstanceState!=null){
        //saved instance state data
        int exScore = savedInstanceState.getInt("score");
        scoreText.setText("Score: "+exScore);
    }

    Timer = new CountDownTimer(15000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            tv_time.setText("" + millisUntilFinished / 1000);
            int progress = (int) (millisUntilFinished / 150);
            progressBar.setProgress(progress);

        }

        @Override
        public void onFinish() {
            progressBar.setProgress(0);
            timeUp(context);

        }
    }.start();

and here is the one for onclick. if the user answer correctly it will add 10points automatically

public void onClick(View view) {
        Button clicked = (Button) view;
        int exScore = getScore();

    if (clicked.getText().toString().equals(this.active_question.getAnswer()) ) {
        if (this.questions.size() > 0) {
                    setQuestion(questions.poll());
                    scoreText.setText("Score: " + (exScore + 10))


    } else  {
        CustomGameOver cdd = new CustomGameOver(PlayQuizActivity.this);
        cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        cdd.show();
        setHighScore();


        Timer.cancel();
        }

}

I dont have any idea on how to get the remaianing time on CountdownTimer and add it as a score when the answer is correct. could anyone please help me please.

like image 368
Emmm Ramos Avatar asked Sep 18 '15 19:09

Emmm Ramos


People also ask

How do you keep a CountDownTimer running even if the app is closed?

To keep the timer running while the app is closed, you need to use a service. Listen to the broadcast of the service in the activity. See this SO answer to learn whether registering the receiver in onCreate, onStart, or onResume is right for you.

What is timer in Android Studio?

A facility for threads to schedule tasks for future execution in a background thread. Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals. Corresponding to each Timer object is a single background thread that is used to execute all of the timer's tasks, sequentially.


2 Answers

Just use millisUntilFinished from onTick of the CountDownTimer

And the bonus will be millisUntilFinished/1000

P.S I think you better use a lower interval than 1000, so the ProgressBar will seem smoother.

like image 170
Udi Idan Avatar answered Nov 11 '22 06:11

Udi Idan


All you need to do is declare a long variable timeleft in your MainActivity.

long timeleft; 

Then, when you create a new Timer, set the "onTick" override to update the timeleft variable each "onTick" (which in the following example is 1000 milliseconds )

    timer = new CountDownTimer(time, 1000) {
       @Override
        public void onTick(long millisecondsUntilFinished) {
            timeleft = millisecondsUntilFinished;
        }
      }

Your app can access then the variable timeleft every time you need to check how much time is left.

   score = score + timeleft / 1000; // divide by 1000 to get seconds

Have in mind that if you need to update the timer, you have to cancel it and create a new timer with the updated time left (and the same override);

       timeleft = timeleft + bonustime;  // (if you want to add bonus time, remember has to be in milliseconds)
       if( timer != null){ timer.cancel();} // better check first if the timer exists
       timer = new CountDownTimer(timeleft, 1000) {
            @Override
            public void onTick(long millisecondsUntilFinished) {
                timeleft = millisecondsUntilFinished;
            }
like image 26
Lucas Cave Avatar answered Nov 11 '22 07:11

Lucas Cave