首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中倒计时计时器时间与实际时间之间的差异?

在Android中倒计时计时器时间与实际时间之间的差异?
EN

Stack Overflow用户
提问于 2018-08-04 18:19:03
回答 1查看 636关注 0票数 1

我的活动中有一个倒计时计时器。其中我已经将分钟转换为毫秒。

基于这一毫秒,我已经设法使用CountDownTimer来对抗HH: mm: ss

因此,我想要主时间和剩余时间之间的差异。

例如,我的主时间是00:10:00,当我停止计数器时,假设我的剩余时间是00:07:30。意味着我花费了2:30

我想要的预期结果是150秒

示例代码:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

int duration;
TextView textView;
ProgressBar progressbar;
Button btn_stop, btn_resume;
CountDownTimer counter;
int i = 1;
int remainingDuration;
int countDownInterval = 1000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView) findViewById(R.id.tvSampleText);
    progressbar = (ProgressBar) findViewById(R.id.progressbar);
    btn_stop = (Button) findViewById(R.id.btn_stop);
    btn_resume = (Button) findViewById(R.id.btn_resume);

    // duration=81200000; //6 hours
    duration = (int) TimeUnit.MINUTES.toMillis(1);
    counter = new MyCount(duration, countDownInterval);
    counter.start();

    btn_stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            counter.cancel();
        }
    });

    btn_resume.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            counter = new MyCount(remainingDuration, countDownInterval);
            counter.start();
        }
    });
}

public class MyCount extends CountDownTimer {
    public MyCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        textView.setText("00:00:00");
    }

    @Override
    public void onTick(long millisUntilFinished) {
        i++;
        long secondsInMilli = 1000;
        long minutesInMilli = secondsInMilli * 60;
        long hoursInMilli = minutesInMilli * 60;

        long elapsedHours = millisUntilFinished / hoursInMilli;
        millisUntilFinished = millisUntilFinished % hoursInMilli;

        long elapsedMinutes = millisUntilFinished / minutesInMilli;
        millisUntilFinished = millisUntilFinished % minutesInMilli;

        long elapsedSeconds = millisUntilFinished / secondsInMilli;

        String yy = String.format("%02d:%02d:%02d", elapsedHours, elapsedMinutes, elapsedSeconds);
        textView.setText(yy);

        progressbar.setProgress((int) i * 100 / (duration / (int) secondsInMilli));
        remainingDuration = (int) millisUntilFinished;
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 18:29:04

首先将分钟持续时间转换为秒

代码语言:javascript
复制
long secs = minutes * 60; 10 * 60 = 600

在tick中,您可以获得以毫秒为单位的剩余时间,因此保留该值作为全局引用,并将其转换为秒

代码语言:javascript
复制
long mMillisUntilFinished;


void onTick (long millisUntilFinished){
    // mMillisUntilFinished = 450000
    mMillisUntilFinished = millisUntilFinished;
}

然后,当您按下停止,然后获得重命名时间差为

代码语言:javascript
复制
long diffSeconds = secs - (mMillisUntilFinished / 1000)
//                 600  - (450000 /1000)
//                 600  - 450
//                 150 

更新:按照建议,计算持续时间和剩余时间的秒数,然后减去它们得到结果。使用long而不是int转换

代码语言:javascript
复制
@Override
public void onTick(long millisUntilFinished) {
    i++;
    long secondsInMilli = 1000;
    long minutesInMilli = secondsInMilli * 60;
    long hoursInMilli = minutesInMilli * 60;
    long tempMili = millisUntilFinished;

    long elapsedHours = tempMili / hoursInMilli;
    tempMili = tempMili % hoursInMilli;

    long elapsedMinutes = tempMili / minutesInMilli;
    tempMili = tempMili % minutesInMilli;

    long elapsedSeconds = tempMili / secondsInMilli;

    String yy = String.format("%02d:%02d:%02d", elapsedHours, elapsedMinutes, elapsedSeconds);
    textView.setText(yy);

    progressbar.setProgress((int) i * 100 / (duration / (int) secondsInMilli));
    remainingDuration = (duration/ 1000) - (millisUntilFinished/1000);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51684613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档