タイマーを[19:59]のような形式でTextViewに表示したいので、スタートボタンをクリックすると、タイマーは次のように表示されます。たとえば、最大20分を設定したい場合は、[19:59]のように表示されます。 :58] [19:87]。誰かアイデアやサンプルコードを教えてもらえますか?
package com.example.testproject;
import Java.util.Timer;
import Java.util.TimerTask;
import Android.os.Bundle;
import Android.widget.TextView;
import Android.app.Activity;
public class MainActivity extends Activity {
public int seconds = 60;
public int minutes = 10;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv = (TextView) findViewById(R.id.main_timer_text);
tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds));
seconds -= 1;
if(seconds == 0)
{
tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds));
seconds=60;
minutes=minutes-1;
}
}
});
}
}, 0, 1000);
}
}
CountDownTimer
を使用できます。
http://developer.Android.com/reference/Android/os/CountDownTimer.html
_ TextView _tv = (TextView) findViewById( R.id.textView1 );
new CountDownTimer(20*60000, 1000) {
public void onTick(long millisUntilFinished) {
_tv.setText("seconds remaining: " +new SimpleDateFormat("mm:ss:SS").format(new Date( millisUntilFinished)));
}
public void onFinish() {
_tv.setText("done!");
}
}.start();
_
キャンセルするには、タイマーでキャンセルを呼び出します。
public final void cancel()
カウントダウンをキャンセルします。
//start button click
CountDown timer = new CountDown(180000, 1000);
timer.start();
//stop button click
timer.stop();
//countdown class
public class CountDown extends CountDownTimer {
public CountDown(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
long ms = millisUntilFinished;
String text = String.format("%02d\' %02d\"",
TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)),
TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms)));
textViewTimer.setText(text);
}
@Override
public void onFinish() {
textViewTimer.setText("ffinish");
}
}
このようにしてくださいactivity_timer.xml
<Android.support.v7.widget.LinearLayoutCompat
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Chronometer
Android:id="@+id/chronometer2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</Android.support.v7.widget.LinearLayoutCompat>
そして活動中
public class TimerActivity extends AppCompatActivity {
private Chronometer chronometer2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
chronometer2 = findViewById(R.id.chronometer2);
chronometer2.start();
}
}
ストップも使用できます
chronometer2.stop();
再起動
chronometer2.setBase(SystemClock.elapsedRealtime());
chronometer2.start();
ここでは、Timerクラスを使用してタイマーを表示しています
public class FourthActivity extends AppCompatActivity {
Button startButton, pauseButton;
TextView timerValue;
Timer timer;
int seconds = 0, minutes = 0, hour = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fourth);
bindView();
timer = new Timer();
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (seconds == 60) {
timerValue.setText(String.format("%02d", hour) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds));
minutes = seconds / 60;
seconds = seconds % 60;
hour = minutes / 60;
}
seconds += 1;
timerValue.setText(String.format("%02d", hour) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds));
}
});
}
}, 0, 1000);
}
});
}
private void bindView() {
timerValue = (TextView) findViewById(R.id.timerValue);
startButton = (Button) findViewById(R.id.startButton);
}
}
レイアウトには、タイマーを開始するための1つのTextViewと1つのボタンがあります。私はTimerクラスのメソッドscheduleAtFixedRate
を使用しています。時間はhh:mm:ss形式で表示されます。
これは cronometer を使用して実行できます。最も主な理由は、API 1 +をサポートすることです。 API 17 +をサポートするTextClockよりもかなり印象的です。
Cronometerを使用すると、他にも多くのことができます。 たとえば開始時間を設定できます
chronometer.setBase(SystemClock.elapsedRealtime());
それについてもっと学ぶこともできます ここ。
TextViewでタイマー表示用のコードを作成しました。形式は次のとおりです。-02:59:00
これをたどると linkStep By Step
コードを取得できます。