最初の問題:
4 つのカウントダウン (異なる値から開始) があり、それらの横にあるイメージビューをクリックすると開始されます。しかし、問題は、最初の画像をクリックすると、4 つのカウントダウンがすべて開始されることです。2 番目の画像をクリックすると、2 番目、3 番目、4 番目のカウントダウンが始まります。
スイッチのケースで何か間違ったことをしたと思いますが、エラーは表示されず、間違いを見つけることができません。
2 番目の問題:
[新しいゲーム] ボタンをクリックすると、すべてのタイマーが停止して 0 になるはずですが、タイマーをクリックすると再び開始され、古い残り時間と新しい残り時間が表示されます。
コード:
public class TimerActivity extends Activity implements
android.view.View.OnClickListener {
private CountDownTimer countDownTimer;
private Button button_new_fight;
public TextView textviewRed;
public TextView textviewBlue;
public TextView textviewDragon;
public TextView textviewBaron;
public TextView tv;
public ImageView imageviewRed;
public ImageView imageviewBlue;
public ImageView imageviewDragon;
public ImageView imageviewBaron;
private boolean timerRedStarted;
private boolean timerBlueStarted;
private boolean timerDragonStarted;
private boolean timerBaronStarted;
private final long startTimeRed = 300000;
private final long startTimeBlue = 300000;
private final long startTimeDragon = 360000;
private final long startTimeBaron = 420000;
private final long interval = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timer_layout);
//binding content to these attributes to work with them
button_new_fight = (Button) this.findViewById(R.id.button1);
button_new_fight.setOnClickListener(this);
textviewRed = (TextView) this.findViewById(R.id.textViewRedTime);
textviewBlue = (TextView) this.findViewById(R.id.TextViewBlueTimeLeft);
textviewDragon = (TextView) this.findViewById(R.id.TextViewDragonTimeLeft);
textviewBaron = (TextView) this.findViewById(R.id.TextViewBaronTimeLeft);
//binding this.imageviews to those of timer_layout.xml
imageviewRed = (ImageView) this.findViewById(R.id.imageView1);
imageviewRed.setOnClickListener(this);
imageviewBlue = (ImageView) this.findViewById(R.id.imageView2);
imageviewBlue.setOnClickListener(this);
imageviewDragon = (ImageView) this.findViewById(R.id.imageView3);
imageviewDragon.setOnClickListener(this);
imageviewBaron = (ImageView) this.findViewById(R.id.imageView4);
imageviewBaron.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
// clear all timers
if (countDownTimer != null) {
countDownTimer.cancel();
countDownTimer = null;
}
// start timer red
case R.id.imageView1:
if (timerRedStarted == false) {
countDownTimer = new MyCount(startTimeRed, interval,
textviewRed);
textviewRed.setText(textviewRed.getText()
+ String.valueOf(startTimeRed));
countDownTimer.start();
}
// start timer blue
case R.id.imageView2:
if (timerBlueStarted == false) {
countDownTimer = new MyCount(startTimeBlue, interval,
textviewBlue);
countDownTimer.start();
}
// start timer dragon
case R.id.imageView3:
if (timerDragonStarted == false) {
countDownTimer = new MyCount(startTimeDragon, interval,
textviewDragon);
countDownTimer.start();
}
// start timer baron
case R.id.imageView4:
if (timerBaronStarted == false) {
countDownTimer = new MyCount(startTimeBaron, interval,
textviewBaron);
countDownTimer.start();
}
}
}
}
クラス MyCount は CountDownTimer を拡張します {
private TextView tv;
public MyCount(long millisInFuture, long countDownInterval, TextView tv) {
super(millisInFuture, countDownInterval);
this.tv = tv;
}
@Override
public void onTick(long millisUntilFinished) {
tv.setText("" + millisUntilFinished / 1000);
}