2013-07-12 15 views
6

Jest to zegar odliczający i chcę wydrukować w ciągu kilku minut i sekund. ex (300000mili) 5 minut, i liczyć 4:60, 4:59 ... tutaj jest częścią mojego koduCountdowntimer w minutach i sekundach

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

i jak mogę umieścić wibrować gdy brakuje 20 sekund? i kiedy to się skończyło? dziękuję i przepraszam za mój zły angielski

+0

Gdzie jest pytanie? – amalBit

+0

Co to jest/czego nie robi teraz? – codeMagic

Odpowiedz

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

Ponieważ Java 1.5 nie jest klasą 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 oznacza czas trwania w danej jednostce ziarnistości i zapewnia narzędzia do konwersji acr jednostek oss, oraz do wykonywania operacji czasowych i opóźnień w tych jednostkach.

Dla wersji Java poniżej 1,5 lub dla systemów, które nie w pełni obsługują klasę TIMEUNIT następujące równania można stosować:

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

wibrować

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

Edit:

Wibracje po 4 min 55 sekund przez 500 milli sekund

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

Jak mogę wprowadzić wibracje, gdy brakuje mi 20 sekund? i kiedy to się skończyło? thx –

+0

@ LucaPimenta musisz znaleźć sposób na porównanie i użycie kodu w edytowanej odpowiedzi – Raghunandan

+0

@ LucaPimenta sprawdź edytuj – Raghunandan

2

Po prostu użyj operatora modulo %, aby uzyskać pozostałe milisekundy i podzielić przez 1000, aby przekonwertować na sekundy.

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

Pracowałem thx man! –

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(); 
    } 
} 
Powiązane problemy