java - Android 使用两个倒数计时器

标签 java android timer countdowntimer

在我的应用中,我使用了两个具有相同值的不同 CountDownTimers。我有两个按钮来控制它们,但是当我按两次按钮时,它会从头开始。我想保留它的最后一个值。

这是我的代码:

t1 = new CountDownTimer(white, 1000) {
    @Override
    public void onTick(long l) {
        btnWhite.setText("seconds remaining: " + l / 1000);
        white = l;
    }

    @Override
    public void onFinish() {

    }
};

t2 = new CountDownTimer(black, 1000) {
    @Override
    public void onTick(long l) {
        btnBlack.setText("seconds remaining: " + l / 1000);
        black = l;
    }

    @Override
    public void onFinish() {

    }
};

btnBlack.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        t1.start();
        t2.cancel();
    }
});

btnWhite.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        t2.start();
        t1.cancel();
    }
});

最佳答案

我已经测试过了,它有效!

我有两个 TextView 和两个 Button。黑色按钮位于黑色 TextView 旁边,白色按钮位于白色 TextView 旁边。

首先我声明了重要的常量。

//contains the elapsed time for each of the timers
long blackElapsed=0,whiteElapsed=0;

//contains the total time with which we start new timers
long totalWhite = 30000;
long totalBlack = 30000;

接下来我初始化 CountDownTimers。无论你在这里放什么都没关系。我只有这个,以便计时器将被初始化为一些值。 原因是它们必须被初始化,以便稍后在 OnClickListener.cancel() 它们。

black = new CountDownTimer(totalWhite, 1000){
    @Override
    public void onTick(long l) {
    }
    @Override
    public void onFinish() {
    }
};
white = new CountDownTimer(totalBlack, 1000){
    @Override
    public void onTick(long l) {
    }
    @Override
    public void onFinish() {
    }
};

最后是按钮的 OnClickListener。 (W 是白色 textView,B 是黑色 textView,b 是黑色按钮,w 是白色按钮)

w.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        black.cancel();
        //using the elapsed time to start a new timer
        totalBlack = totalBlack - blackElapsed;
        //this preserves milliseconds by ticking every millisecond
        white = new CountDownTimer(totalBlack, 1){
            @Override
            public void onTick(long l) {
                B.setText(l+"");
                blackElapsed=totalBlack-l;  //updating the elapsed time
            }
            @Override
            public void onFinish() {
            }
        }.start();
    }
});
//we do a similar thing with the other player's button
b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        white.cancel();
        totalWhite = totalWhite - whiteElapsed;
        black = new CountDownTimer(totalWhite, 1){
            @Override
            public void onTick(long l) {
                W.setText(l+"");
                whiteElapsed=totalWhite-l;
            }
            @Override
            public void onFinish() {
            }
        }.start();
    }
});

关于java - Android 使用两个倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908611/

相关文章:

android - 滑动到侧面板,第一个面板部分可见

java - 在 JSF 中格式化日期以放入 <p :tab title =""> attribute

javazoom Player 无法在 Windows 上使用 SHOUTcast 流(表示无效的 Https 请求)

java - 解析符号之间的标签

C++如何在Linux中使计时器准确

python - 在 Python 中获取计时器刻度

java - 从其他类中的 start() 方法更改文本

java - Druid中存储HashMap的数据结构

java - 将重要的应用内容保存到 xml 资源中

每次启动应用程序时都会重新创建 Android 数据库