2013-07-12 199 views
6

这是一个倒计时计时器,我想在几分钟和几秒钟内打印。 EX(300000mili)5分钟,算上4:60,4:59 ... 这里是我的代码在几分钟和几秒钟内倒计时

 final MyCounter timer = new MyCounter(300000,1000); 
    blue.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      timer.start(); 
     } 
    }); 
} 
public class MyCounter extends CountDownTimer{ 

    public MyCounter(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
     blue.setText("Live"); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     blue.setText((millisUntilFinished/60000)+":"+(millisUntilFinished/5000)); 
     // i tried this 
    } 
} 

,我怎么可以把振动部分缺失20秒什么时候?什么时候结束? 感谢和抱歉我的英文不好

+0

问题在哪里? – amalBit

+0

现在是/现在不行吗? – codeMagic

回答

36

http://developer.android.com/reference/android/os/CountDownTimer.html

TextView _tv = (TextView) findViewById(R.id.textView1); 
new CountDownTimer(30000, 1000) { // adjust the milli seconds here 

    public void onTick(long millisUntilFinished) { 
    _tv.setText(""+String.format("%d min, %d sec", 
        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), 
        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 
    } 

    public void onFinish() { 
     _tv.setText("done!"); 
    } 
}.start(); 

由于Java 1.5存在java.util.concurrent.TimeUnit中类

_tv.setText(""+String.format("%d min, %d sec", 
        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), 
        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html

TimeUnit表示在给定的单位时间段的粒度,并提供实用的方法来转换acr oss单元,并在这些单元中执行计时和延迟操作。

对于Java版本低于1.5或者不完全支持TIMEUNIT类下面的公式可用于系统:

int seconds = (int) (milliseconds/1000) % 60 ; 
int minutes = (int) ((milliseconds/(1000*60)) % 60); 
int hours = (int) ((milliseconds/(1000*60*60)) % 24); 

振动

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
      // Vibrate for 500 milliseconds 
      v.vibrate(500); 
    <uses-permission android:name="android.permission.VIBRATE"/> // permission in manifest 

编辑:

震动在4分55秒500毫秒

if((TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)==4) && 
        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))==55) 
      { 

      Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
      // Vibrate for 500 milliseconds 
      v.vibrate(500); 
      } 
+0

如何在丢失20秒时振动?什么时候结束? thx –

+0

@LucaPimenta你需要找到一种方法来比较和使用编辑的答案中的代码 – Raghunandan

+0

@LucaPimenta检查编辑 – Raghunandan

2

只需使用模运算符%即可获取剩余的毫秒数并除以1000转换为秒。

blue.setText((millisUntilFinished/60000)+":"+(millisUntilFinished % 60000/1000)); 
+0

工作thx男人! –

2
package com.zt.voicerecorder.controller; 

import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 
import com.zt.voicerecorder.R; 

public class MainActivity extends AppCompatActivity { 

    private TextView tvTimer; 
    private Handler handler = new Handler(); 
    private Runnable runnable; 
    private long milliSeconds = 0; 

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

     tvTimer = (TextView) findViewById(R.id.tvTimer); 
     timerStart(); 

    } 

    private void timerStart() { 
     runnable = new Runnable() { 
      @Override 
      public void run() { 
       handler.postDelayed(this, 1000); 
       milliSeconds = milliSeconds + 1000; 

       int hours = (int) ((milliSeconds/(1000 * 60 * 60)) % 24); 
       int minutes = (int) ((milliSeconds/(1000 * 60)) % 60); 
       int seconds = (int) (milliSeconds/1000) % 60; 

       tvTimer.setText(String.format("%02d", hours) 
         + ":" + String.format("%02d", minutes) 
         + ":" + String.format("%02d", seconds)); 
      } 
     }; 
     handler.postDelayed(runnable, 0); 
    } 

    @Override 
    protected void onDestroy() { 
     handler.removeCallbacks(runnable); 
     super.onDestroy(); 
    } 
} 
相关问题