3

我正在尝试在我的一个应用程序中使用秒表,我已经将它带到了它将开始计数秒数并停止计数停止的位置。我的问题是它会在 60 秒后继续。例如,如果我等了两分钟,我会得到 120 秒。

所以我的问题是我怎样才能做到这一点,一旦秒数达到 60 分钟就会增加一秒并且秒数会重新开始?

所以我会得到 2:00 而不是 :120。这是我的代码:

final int MSG_START_TIMER = 0;
final int MSG_STOP_TIMER = 1;
final int MSG_UPDATE_TIMER = 2;

Stopwatch timer = new Stopwatch();
final int REFRESH_RATE = 100;

Handler mHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
        case MSG_START_TIMER:
            timer.start(); 
            mHandler.sendEmptyMessage(MSG_UPDATE_TIMER);
            break;

        case MSG_UPDATE_TIMER:              
            tvTextView.setText(":"+ timer.getElapsedTimeSecs());                
            mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
            break;                                  
        case MSG_STOP_TIMER:
            mHandler.removeMessages(MSG_UPDATE_TIMER); 
            timer.stop();
            tvTextView.setText("");
            break;

        default:
            break;
        }
    }
};

还有:

 public void start(View v) {
    mHandler.sendEmptyMessage(MSG_START_TIMER);
}

public void stop(View v) {
    mHandler.sendEmptyMessage(MSG_STOP_TIMER);
}

顺便说一句,我查看了这个问题,但他的问题在于 TimeSpan,如果我理解正确,这与秒表不同(如果我错了,请纠正我)。感谢您的时间和精力。

4

2 回答 2

8

如果您从以秒为单位的时间开始:

display = String.format("%d:%02d", seconds / 60, seconds % 60);

如果您不希望分钟数为 0:

if (seconds < 60)
    display = String.format("%02d", seconds);
else
    display = String.format("%d:%02d", seconds / 60, seconds % 60);
于 2012-08-12T00:50:30.817 回答
2

您只需要创建一个为您创建字符串的函数。将其存放在可到达的地方。

    public String NumToStr(long i){
        if (i < 10 ) {
            return ("0" + Long.toString(i));
        }
        return Long.toString(i);
    }

这将采用任何小于 10 的数字,并为您提供一个数字前面带有“0”的字符串。

即发送一个 7 并得到“07”,然后发送一个 55 并得到“55”,因为它不少于 10。最后发送它的秒数 5 并得到“05”。现在把字符串加在一起,

    Hour + ":" + Minute + ":" + Seconds;

你会得到“07:55:05”

接下来就放一个

    if (seconds > 60) {
        seconds = 0
        minutes++; 
    }
    if (minutes > 60) {
        minutes = 0
        hours++;
    }
    if (hours > 12) {
        hours = 0
    }

恕我直言,这是基本的东西。

作为回应,你应该把所有这些放在哪里?随你喜欢。但是您需要重做一些代码。

     case MSG_UPDATE_TIMER:
        long TimePassed;
        TimePassed = Seconds;
        if (Minutes > 0) {
            TimePassed = TimePassed  + (60 * Minutes);
        }
        if (Hours > 0) {
            TimePassed = TimePassed + (60 * 60 * Hours);
        }

        Seconds =  (timer.getElapsedTimeSecs()- TimePassed );

        if (Seconds > 60) {
            Seconds = 0
            Minutes++; 
        }
        if (Minutes > 60) {
            Minutes = 0
            hours++;
        }
        String timeSecs = NumToStr(Seconds);
        String timeMins = NumToStr(Minutes);
        String timeHours = NumToStr(Hours);

        String Time = timeHours + ":" + timeMins + ":" + timeSecs; 

        tvTextView.setText(Time);   

        mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
        break;  
于 2012-08-12T00:30:12.940 回答