2013-07-12 35 views
6

Đó là đồng hồ đếm ngược và tôi muốn in theo phút và giây. cũ (300000mili) 5 phút, và đếm 4:60, 4:59 ... đây là một phần của mã của tôiCountdowntimer theo phút và giây

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

Và làm thế nào tôi có thể đặt rung khi mất tích 20 giây? và khi nó kết thúc? cảm ơn và xin lỗi vì tiếng anh xấu của tôi

+0

Câu hỏi ở đâu? – amalBit

+0

Hiện tại, nó có hoạt động không? – codeMagic

Trả lời

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

Kể từ java 1.5 có lớp 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

Một TIMEUNIT đại diện cho khoảng thời gian thời gian tại một đơn vị cung cấp của granularity và cung cấp các phương thức tiện ích để chuyển đổi acr oss đơn vị, và để thực hiện thời gian và hoạt động chậm trễ trong các đơn vị này.

Đối với phiên bản Java dưới 1.5 hoặc cho các hệ thống không hỗ trợ đầy đủ các lớp TIMEUNIT các phương trình sau đây có thể được sử dụng:

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

Để rung

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:

Rung tại 4 phút 55 giây trong 500 milli giây

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

Và làm thế nào tôi có thể rung động khi thiếu 20 giây? và khi nó kết thúc? thx –

+0

@LucaPimenta bạn cần phải tìm cách so sánh và sử dụng mã trong câu trả lời đã chỉnh sửa – Raghunandan

+0

@LucaPimenta kiểm tra chỉnh sửa – Raghunandan

2

Chỉ cần sử dụng toán tử modulo % để nhận được mili giây còn lại và chia cho 1000 để chuyển đổi thành giây.

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

Người đàn ông làm việc 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(); 
    } 
} 
Các vấn đề liên quan