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

代码startActivity:

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

最佳答案

首先,请记住long是整数类型。
私人最终长间隔= 1/100;
不等于0.01;我相信它将计算为零。另外,这就是您希望onTick调用的频率。我相信您正在尝试说您希望每0.01毫秒被调用一次,这似乎太过分了。也许您的意思是每100毫秒(每秒10次)?

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

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

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

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

第二个是做我上面描述的。然后,当您有小时数和分钟数时:
剩余的浮动时间=(浮动)小时+(浮动)分钟/ 100
使用String.format将其显示在textview中。就像是
String.format(“%。1f%n”,timeRemaining)
仅显示一个小数点

我实际上并没有尝试过该代码,但从我的头顶上,这应该给您一些技巧,以指导您朝着正确的方向发展。

10-07 13:19
查看更多