1

我有一个应用程序可以告诉我要上学多少小时(:P)。我有一个带有文本时间的文本视图:(还有几个小时)。这应该是 6.2 但现在是 6,然后当我点击开始时,它说学校立即完成然后崩溃。哦,我想以小时为单位显示时间,像这样(6.2 = 6 小时 20 分钟)。可能是什么问题呢?

代码启动活动:

package com.nieeli.timer;

import android.app.Activity;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class startActivity extends Activity implements OnClickListener {
    private static final String tag = "Main";
    private MalibuCountDownTimer countDownTimer;
    private long timeElapsed;
    private boolean timerHasStarted = false;
    private Button startB;
    private TextView text;
    private TextView timeElapsedView;

    private final long startTime = 22500000/3600000;
    private final long interval = 1/100;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startB = (Button) this.findViewById(R.id.button);
        startB.setOnClickListener(this);

        text = (TextView) this.findViewById(R.id.timer);
        timeElapsedView = (TextView) this.findViewById(R.id.timeElapsed);
        countDownTimer = new MalibuCountDownTimer(startTime, interval);
        text.setText(text.getText() + String.valueOf(startTime));
    }

    public void onClick(View v) {
        if (!timerHasStarted) {
            countDownTimer.start();
            timerHasStarted = true;
            startB.setText("Start");
        } else {

            countDownTimer.cancel();
            timerHasStarted = false;
            startB.setText("Stop and Reset");
        }
    }

    // CountDownTimer class
    public class MalibuCountDownTimer extends CountDownTimer {

        public MalibuCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {
            text.setText("School Finished!");
            timeElapsedView.setText("Time Passed: "
                    + String.valueOf(startTime));
        }

        @Override
        public void onTick(long millisUntilFinished) {
            text.setText("Time remain:" + millisUntilFinished);
            timeElapsed = startTime - millisUntilFinished;
            timeElapsedView.setText("Time Left: "
                    + String.valueOf(timeElapsed));
        }
    }
}

没有对清单或布局进行任何更改。

感谢:D

4

1 回答 1

3

首先,记住 long 是一个整数类型。私人最终长间隔 = 1/100;不等于 0.01;我相信它会归零。此外,这是您希望调用 onTick 的频率;我相信你想说你想每 0.01 毫秒被调用一次,这似乎太过分了。也许您的意思是每 100 毫秒(每秒十次)?

您可能还想交换 startB.setText 行,以便在停止时显示“开始”,在启动时显示“停止”

您想将毫秒转换为小时和分钟吗?你可以尝试这样的事情:long totalMinutes = millis / 1000 / 60; 长时间 = 毫秒 / 60;long minutes = totalMinutes - (hours * 60);

编辑:如果您希望倒计时数(6.2 代表 6 小时 20 分钟)每十分钟减少 0.1,有两种主要方法。

第一个选项是将“间隔”设置为 10 * 60 * 1000(十分钟内的毫秒数)。然后在 onTick 中,取一个浮点数(10.0 或其他)并减少 0.1。这可能是一种快速而肮脏的方法,即使它有效,但它并不理想。

第二个是做我上面描述的事情。然后当你有小时数和分钟数时:float timeRemaining = (float) hours + (float) minutes / 100 使用 String.format 在文本视图中显示它。类似 String.format("%.1f%n", timeRemaining) 的东西只用一位小数显示。

我实际上并没有尝试过代码——但在我脑海中,这应该会给你一些提示,引导你朝着正确的方向前进。

于 2012-05-15T17:09:58.977 回答