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 之前通过半秒,但在该类实现中不会。

计数结束时有一些奇怪的延迟。我建议寻找更好的实现。

于 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步

仅对于此示例,我在 Activity 中工作。所以这是代码:

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 回答