如何在android中显示计时器

raj*_*nce 10 android timer countdown

我想在TextView中以类似[19:59]的格式显示计时器.所以当我点击开始按钮时,计时器将显示如下,例如,我想设置20分钟,它将显示为[19] :58] [19:87].谁能提出一些想法或示例代码?在此输入图像描述

Rag*_*dan 16

你可以使用CountDownTimer.

http://developer.android.com/reference/android/os/CountDownTimer.html

     TextView _tv = (TextView) findViewById( R.id.textView1 );
    new CountDownTimer(20*60000, 1000) {

        public void onTick(long millisUntilFinished) {
            _tv.setText("seconds remaining: " +new SimpleDateFormat("mm:ss:SS").format(new Date( millisUntilFinished)));
        }

        public void onFinish() {
           _tv.setText("done!");
        }
     }.start();
Run Code Online (Sandbox Code Playgroud)

要取消只是在计时器上取消取消.

public final void cancel()

取消倒计时.

  • 这可以用来计算计时器吗?即从0开始并进入无穷大 (2认同)

raj*_*nce 16

package com.example.testproject;

import java.util.Timer;
import java.util.TimerTask;

import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity {

    public int seconds = 60;
    public int minutes = 10;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Declare the timer
        Timer t = new Timer();
        //Set the schedule function and rate
        t.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        TextView tv = (TextView) findViewById(R.id.main_timer_text);
                        tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds));
                        seconds -= 1;

                        if(seconds == 0)
                        {
                            tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds));

                            seconds=60;
                            minutes=minutes-1;

                        }



                    }

                });
            }

        }, 0, 1000);
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 为什么每次在 run 方法中都初始化 `TextView`。 (2认同)

mus*_*vgi 5

  //start button click
     CountDown timer = new CountDown(180000, 1000);
     timer.start();

//stop button click
timer.stop();   

    //countdown class
    public class CountDown extends CountDownTimer {

          public CountDown(long millisInFuture, long countDownInterval) {
             super(millisInFuture, countDownInterval);
          }

          @Override
          public void onTick(long millisUntilFinished) {
             long ms = millisUntilFinished;
             String text = String.format("%02d\' %02d\"",
                                         TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)),
                                         TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms)));
             textViewTimer.setText(text);
          }

          @Override
          public void onFinish() {
             textViewTimer.setText("ffinish");
          }
       }
Run Code Online (Sandbox Code Playgroud)


Tar*_*ath 5

这样做activity_timer.xml

<android.support.v7.widget.LinearLayoutCompat
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <Chronometer
            android:id="@+id/chronometer2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


    </android.support.v7.widget.LinearLayoutCompat>
Run Code Online (Sandbox Code Playgroud)

在活动中

public class TimerActivity extends AppCompatActivity {
   private Chronometer chronometer2;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_timer);

        chronometer2 = findViewById(R.id.chronometer2);
        chronometer2.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用停止

chronometer2.stop();
Run Code Online (Sandbox Code Playgroud)

重新开始

chronometer2.setBase(SystemClock.elapsedRealtime());
 chronometer2.start();
Run Code Online (Sandbox Code Playgroud)