In this android countdown timer example, we’ll implement a timer object to display the progress in a ProgressBar. The application we’ll build in this tutorial is a useful component in Quiz apps where the time left to complete the level is displayed graphically to enhance the user experience.
在此android countdown计时器示例中,我们将实现一个timer对象以在ProgressBar中显示进度 。 我们将在本教程中构建的应用程序是测验应用程序中的有用组件,其中,完成关卡所需的时间以图形方式显示,以增强用户体验。
Android CountDownTimer (Android CountDownTimer)
Android CountDownTimer
class is used to schedule a countdown until a time in the future defined by the user, with regular notifications on intervals along the way. This class is an abstract class whose methods need to be overridden to implement it in our project. The following line needs to be added in our activity to import the class :
Android CountDownTimer
类用于安排倒计时,直到用户定义未来的某个时间为止,并定期通知间隔时间。 此类是一个抽象类,其方法必须重写才能在我们的项目中实现。 在我们的活动中需要添加以下行以导入该类:
import android.os.CountDownTimer;
import android.os.CountDownTimer;
The relevant methods of the CountDownTimer Class are given below.
CountDownTimer类的相关方法如下。
synchronized final void cancel()
: This is used to cancel the countdownsynchronized final void cancel()
:用于取消倒计时abstract void onFinish()
: This callback method is fired when the timer finishesabstract void onFinish()
:计时器结束时会触发此回调方法abstract void onTick(long millisUntilFinished)
: This callback method is fired on regular intervalsabstract void onTick(long millisUntilFinished)
:定期触发此回调方法synchronized final CountDownTimer start()
: This method is used to start the countdownsynchronized final CountDownTimer start()
:此方法用于启动倒计时
The signature of the public constructor of the CountDownTimer class is given below.
CountDownTimer类的公共构造函数的签名如下所示。
CountDownTimer(long millisInFuture, long countDownInterval)
CountDownTimer(long millisInFuture, long countDownInterval)
The parameters of the constructors are defined as follows :
构造函数的参数定义如下:
- millisInFuture : The number of milli seconds in the future from the call to start() until the countdown is done and onFinish() is called millisInFuture :从调用start()到倒计时完成并调用onFinish()以后的毫秒数。
- countDownInterval : The interval along the way to receive onTick(long) callbacks countDownInterval :接收onTick(long)回调的时间间隔
In this project we’ll update the time values in a ProgressBar as the onTick() method is invoked repeatedly.
在此项目中,由于onTick()方法被重复调用,我们将更新ProgressBar中的时间值。
Android倒数计时器示例项目结构 (Android Countdown Timer Example Project Structure)
Android倒数计时器代码 (Android Countdown Timer Code)
The activity_main.xml consists of two buttons i.e. the start and stop timer buttons and a ProgressBar to display the time.
activity_main.xml由两个按钮组成,即开始和停止计时器按钮以及用于显示时间的ProgressBar。
activity_main.xml
activity_main.xml
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="10"
android:minHeight="50dp"
android:minWidth="200dp"
android:progress="0"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Timer"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="61dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop Timer"
android:id="@+id/button2"
android:layout_centerHorizontal="true"
android:layout_marginTop="46dp"
android:layout_below="@+id/progressBar" />
</RelativeLayout>
The MainActivity.java is given below :
MainActivity.java如下所示:
package com.journaldev.countdowntimer;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
ProgressBar progressBar;
Button start_timer,stop_timer;
MyCountDownTimer myCountDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar=(ProgressBar)findViewById(R.id.progressBar);
start_timer=(Button)findViewById(R.id.button);
stop_timer=(Button)findViewById(R.id.button2);
start_timer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myCountDownTimer = new MyCountDownTimer(10000, 1000);
myCountDownTimer.start();
}
});
stop_timer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myCountDownTimer.cancel();
}
});
}
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
int progress = (int) (millisUntilFinished/1000);
progressBar.setProgress(progressBar.getMax()-progress);
}
@Override
public void onFinish() {
finish();
}
}
}
In the above code we’ve defined an Anonymous Inner Class called MyCountDownTimer
. In this example we’ve set a Timer for 10 seconds that updates after every second. By default the timer displays/updates the time in decreasing order ( as its named CountDown!), Hence to show the progress in increasing order we’ve subtracted the time from the max time.
在上面的代码中,我们定义了一个名为MyCountDownTimer
的匿名内部类 。 在此示例中,我们将计时器设置为10秒,该计时器每秒钟更新一次。 默认情况下,计时器以降序显示/更新时间(称为CountDown!),因此,为了以升序显示进度,我们从最大时间中减去了时间。
The timer once stopped restarts from the beginning. Below is our android countdown timer app in action.
一旦停止计时器将重新开始。 以下是我们运行中的android倒数计时器应用程序。
This brings an end to countdown timer android tutorial. You can download the final Android CountDownTimer Project from the below link.
这样就结束了倒数计时器Android教程。 您可以从下面的链接下载最终的Android CountDownTimer项目 。
Reference: Official Documentation
参考: 官方文档
翻译自: https://www.journaldev.com/9896/android-countdowntimer-example