格式化秒表以显示00:00

时间:2012-08-12 00:15:25

标签: java android stopwatch

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

所以我的问题是 如何才能实现这一点,一旦秒数达到60分钟,分钟数将增加1秒,秒数将重新开始?

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

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);
}

顺便说一下,我看了this question,但他的问题出在TimeSpan上,如果我理解正确的话与秒表不同(如果我错了,请纠正我)。感谢您的时间和精力。

2 个答案:

答案 0 :(得分:7)

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

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);

答案 1 :(得分: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;