0

これは、「カウントダウンタイマーを一時停止するにはどうすればよいですか」というよくある質問のようです。

私は有望に見えるこのコードを見つけました:

http://www.java2s.com/Open-Source/Android/Timer/multitimer-android/com/cycleindex/multitimer/CountDownTimerWithPause.java.htm

コードで実装する方法がわかりません。抽象化されたメソッドをオーバーライドして、クラスを拡張する必要があります。誰かが私にこれを行う方法のアイデアを与えることができますか?

4

2 に答える 2

1

これがあなたのレイアウトです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="0"
            android:gravity="center_horizontal"
            android:layout_marginBottom="40dp"
            android:layout_marginTop="20dp"
            android:textSize="27dp"
            android:id="@+id/txtView"/>
    <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_gravity="center">
        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Start"
                android:id="@+id/startButton"/>
        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Stop"
                android:id="@+id/stopButton"
                android:layout_toRightOf="@id/startButton"/>
    </RelativeLayout>
</LinearLayout>


これがあなたのアクティビティクラスです

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MyActivity extends Activity implements View.OnClickListener {

    TextView txt = null;
    Button startButton = null;
    Button stopButton = null;
    CountDownTimerWithPause timer = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txt = (TextView) findViewById(R.id.txtView);
        startButton = (Button) findViewById(R.id.startButton);
        stopButton = (Button) findViewById(R.id.stopButton);

        startButton.setOnClickListener(this);
        stopButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view == startButton) {
            if (timer == null) {
                initTimer();
            }

            timer.resume();
        }

        if (view == stopButton) {
            timer.pause();
        }
    }

    private void initTimer() {
        timer = new CountDownTimerWithPause(10000, 1000, false) {
            @Override
            public void onTick(long millisUntilFinished) {
                Integer currentValue = Integer.valueOf((String) MyActivity.this.txt.getText());
                MyActivity.this.txt.setText(String.valueOf(currentValue + 1));
            }

            @Override
            public void onFinish() {
                Toast.makeText(MyActivity.this, "finish", Toast.LENGTH_SHORT).show();
            }
        };

        timer.create();
    }
}

CountDownTimerWithPauseをパッケージにコピーすることを忘れないでください。

私のために働く、しかし...

いくつかのバグについて言及しますが、それはアプリケーションによって異なります。多分それはあなたにとって大丈夫です。バグは-タイマーを開始すると、すぐに起動します。'だから何?' あなたは尋ねるかもしれません。3秒半が経過したときに[停止]ボタンをクリックするとします。したがって、[スタート]ボタンをクリックすると、4が表示される前に0.5秒のパスが期待されますが、そのクラスの実装ではそうではありません。

そして、カウントの終わりにいくつかの奇妙な遅れがあります。より良い実装を探すことをお勧めします。

于 2012-12-10T18:46:02.850 に答える
0

私はCountDownTimerWithPause自分のプロジェクトで使用しましたが、それは非常に簡単です。このカウンターの実装を説明するために書いたこのサンプルコードを見てください。

ステップ1

後で説明するために、サンプルのXMLレイアウトを作成しました。このレイアウトには3つのボタンが含まれています。

  1. 始める
  2. 一時停止
  3. 履歴書

レイアウト:

<Button
    android:id="@+id/button_start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Start" />

<Button
    android:id="@+id/button_pause"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pause" />

<Button
    android:id="@+id/button_resume"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Resume" />

ステップ2

この例のために、私はアクティビティ内で作業しました。だからこれはコードです:

public class MainActivity extends Activity
{

    private CountDownTimerWithPause _countDownTimerWithPause = null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timer);

        /*
         * Definition of the counter
         */
        _countDownTimerWithPause = new CountDownTimerWithPause(10000, 1000, true)
        {

            @Override
            public void onTick(long millisUntilFinished)
            {
                Toast.makeText(getApplicationContext(), "Tick", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFinish()
            {
                Toast.makeText(getApplicationContext(), "Finished", Toast.LENGTH_SHORT).show();
            }
        };

        /*
         * Click to start the counter
         */
        Button buttonStart = (Button) findViewById(R.id.button_start);
        buttonStart.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                _countDownTimerWithPause.create();
            }
        });

        /*
         * Click to pause the counter
         */
        Button buttonPause = (Button) findViewById(R.id.button_pause);
        buttonPause.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                _countDownTimerWithPause.pause();
            }
        });

        /*
         * Click to resume the counter
         */
        Button buttonResume = (Button) findViewById(R.id.button_resume);
        buttonResume.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                _countDownTimerWithPause.resume();
            }
        });
    }

}

CountDownTimerWithPauseカウンターを開始、一時停止、再開するために、どのように拡張し、どのメソッドを呼び出す必要があるかを簡単に確認できます。

このカウンターの使い方を説明できたらと思います。

于 2012-12-10T19:14:29.937 に答える