8

一時停止と再起動でカウントダウンタイマーを実行したい.ontick()とonfinish()を実装してカウントダウンタイマーを表示しています。助けてください.HEreはカウントダウンタイマーのコードです

final CountDownTimer Counter1 = new CountDownTimer(timervalue1 , 1000)

     {
 public void onTick(long millisUntilFinished)

  {
            System.out.println("onTick method!"(String.valueOf(millisUntilFinished/1000)));long s1=millisUntilFinished;
  }

public void onFinish() 

{
            System.out.println("Finished!");
}

}
4

8 に答える 8

19

onTick メソッドで..残りのミリ秒を保存します

   long s1=millisUntilFinished;

タイマーの使用を一時停止したいとき..

   Counter.cancel();

再開したいときは、残りのミリ秒で新しいカウントダウンタイマーを作成します..

 timervalue=s1
  counter= new Counter1();
   counter.start();

このリンクを参照してください

于 2012-04-28T08:55:26.650 に答える
3

ハンドラーに何かを追加してonTick、クラスのタイマーの進行状況 (残りのミリ秒数) を保存します。

タイマーonPause()のアクティビティ呼び出しのメソッド内。cancel()

アクティビティのonResume()メソッドで、保存された残りのミリ秒数で新しいタイマーを作成します。

以下のリンクを参照してください

リンク

リンク

于 2012-04-28T08:55:46.613 に答える
2

この場合、2 つのプライベート変数を使用しています。

private long startPauseTime;
private long pauseTime = 0L;

public void pause() { 
    startPauseTime = System.currentTimeMillis(); 
}

public void resumen(){ 
    pauseTime +=  System.currentTimeMillis() - startPauseTime; 
}
于 2012-04-28T09:16:23.043 に答える
0

残念ながら、一時停止または停止することはできずCountDownTimer、onTick で一時停止または停止してもユーザーには何の影響もありませんTimerTask

セットアップTimerTask

class UpdateTimeTask extends TimerTask {
   public void run() {
       long millis = System.currentTimeMillis() - startTime;
       int seconds = (int) (millis / 1000);
       int minutes = seconds / 60;
       seconds     = seconds % 60;

       timeLabel.setText(String.format("%d:%02d", minutes, seconds));
   }

}
if(startTime == 0L) {
   startTime = evt.getWhen();
   timer = new Timer();
   timer.schedule(new UpdateTimeTask(), 100, 200);
}

このようなイベントリスナーを追加できます..

private Handler mHandler = new Handler();

...

OnClickListener mStartListener = new OnClickListener() {
   public void onClick(View v) {
       if (mStartTime == 0L) {
            mStartTime = System.currentTimeMillis();
            mHandler.removeCallbacks(mUpdateTimeTask);
            mHandler.postDelayed(mUpdateTimeTask, 100);
       }
   }
};

OnClickListener mStopListener = new OnClickListener() {
   public void onClick(View v) {
       mHandler.removeCallbacks(mUpdateTimeTask);
   }
};

詳細については、Android ドキュメントを参照してください。

于 2012-04-28T09:08:20.730 に答える
-1

CountDownTimer の Pause/Resume を作成する便利で簡単な方法は、次のように、タイマーの開始、一時停止、および再開用に別のメソッドを作成することです。

public void timerStart(long timeLengthMilli) {
        timer = new CountDownTimer(timeLengthMilli, 1000) {

            @Override
            public void onTick(long milliTillFinish) {
                milliLeft=milliTillFinish;
                min = (milliTillFinish/(1000*60));
                sec = ((milliTillFinish/1000)-min*60);
                clock.setText(Long.toString(min)+":"+Long.toString(sec));
                Log.i("Tick", "Tock");
            }

timerStart には、以下の resume() メソッドで再利用される長いパラメーターがあります。resume() メソッドで送信できるように、milliTillFinished (上記の milliLeft) を保存することを忘れないでください。それぞれ以下のメソッドを一時停止および再開します。

public void timerPause() {
        timer.cancel();
    }

    private void timerResume() {
        Log.i("min", Long.toString(min));
        Log.i("Sec", Long.toString(sec));
        timerStart(milliLeft);
    }

参考までに、ボタンのコードは次のとおりです。

startPause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(startPause.getText().equals("Start")){
                    Log.i("Started", startPause.getText().toString());
                    startPause.setText("Pause");
                    timerStart(15*1000);
                } else if (startPause.getText().equals("Pause")){
                    Log.i("Paused", startPause.getText().toString());
                    startPause.setText("Resume");
                    timerPause();
                } else if (startPause.getText().equals("Resume")){
                    startPause.setText("Pause");
                    timerResume();
                }
于 2016-08-31T09:25:06.987 に答える