这似乎是一个常见问题,“我如何暂停倒数计时器”?
我发现这段代码看起来很有希望:
我只是不确定如何在代码中实现它。我需要重写抽象方法并扩展类。有人可以告诉我如何做到这一点吗?
这似乎是一个常见问题,“我如何暂停倒数计时器”?
我发现这段代码看起来很有希望:
我只是不确定如何在代码中实现它。我需要重写抽象方法并扩展类。有人可以告诉我如何做到这一点吗?
这是你的布局
<?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 之前通过半秒,但在该类实现中不会。
计数结束时有一些奇怪的延迟。我建议寻找更好的实现。
我CountDownTimerWithPause
在我的项目中使用过,它非常简单。看看我刚刚写的这个示例代码来解释这个计数器的实现。
我创建了示例 XML 布局,只是为了稍后更好地解释。此布局包含 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" />
仅对于此示例,我在 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
以及应该调用哪些方法来启动、暂停和恢复计数器。
希望我能解释一下这个计数器的用法。