这似乎是一个常见的问题,“如何暂停倒数计时器”?
我发现这个代码看起来很有希望:
我只是不确定如何在代码中实现它。我需要覆盖抽象的方法并扩展类。有人能告诉我如何做到这一点吗?
答案 0 :(得分: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之前经过半秒,但不会在该类实现中。
计算结束时有一些奇怪的延迟。我建议寻找更好的实施方案。
答案 1 :(得分:0)
我在我的项目中使用了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" />
就本例而言,我在一个活动中工作。 所以这是代码:
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
以及应该调用哪些方法来启动,暂停和恢复计数器。
希望我能解释一下这个计数器的用法。