Android基础之计时器

来源:互联网 发布:网络黄歌试听 编辑:程序博客网 时间:2024/06/05 23:42

Android提供了一个计时器组件,叫做Chronometer,该组件继承自TextView,因此都会显示一段文字。但是它显示的并不是当前时间,而是从setBase()设置的时刻所经过的时间。

他的用法也十分简单,只提供了一个android:format属性,用于指定时间的格式。除此之外,还提供了一下一些方法以供使用:

setBase(): 用于设置计时器的起始时间。setFormat(): 用于设置显示时间的格式。start(): 开始计时。stop(): 停止计时。setOnChronometerTickListener(Chronometer.OnChronometerTickLisenter listener): 用于设置计时器的监听器,当计时器时间改变时触发该监听。

下面是他的使用方法:

在XML文件中添加一个定时器Chronometer:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <Chronometer        android:id="@+id/chronometer1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_marginTop="29dp"        android:textSize="50sp"        android:textColor="#ff0000"/>    <Button        android:id="@+id/main_btn_start"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:text="开始" />    <Button        android:id="@+id/main_btn_reset"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBottom="@+id/main_btn_start"        android:layout_toRightOf="@+id/analogClock1"        android:text="重新" />    <Button        android:id="@+id/main_btn_stop"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_below="@+id/main_btn_reset"        android:layout_marginTop="19dp"        android:text="停止" /></RelativeLayout>

这里还添加了三个按钮,分别是为了开始计时,停止计时以及重新计时。
接着在java代码中对计时器进行操作:

public class MainActivity extends Activity {    @ViewInject(R.id.main_btn_start)    private Button btn_start;    @ViewInject(R.id.main_btn_stop)    private Button btn_stop;    @ViewInject(R.id.main_btn_reset)    private Button btn_reset;    @ViewInject(R.id.chronometer1)    private Chronometer chro;    private long recordtime = 0;//记录计时的时间    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ViewUtils.inject(this);        initListenter();        }    private void initListenter() {        btn_start.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                //开始计时的时间                chro.setBase(SystemClock.elapsedRealtime()-recordtime);                chro.start();//开始计时            }        });        btn_stop.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                chro.stop();//停止计时                recordtime = SystemClock.elapsedRealtime()-chro.getBase();            }        });        btn_reset.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                chro.setBase(SystemClock.elapsedRealtime());                recordtime = 0;                chro.stop();            }        });    }}

这里简单的用到了xUtils框架,在Activity中注入框架ViewUtils.inject(this); 并用注解@ViewInject(ID)将findViewById()省去。
实例化Chronometer和三个Button后,为三个Button添加监听器OnClickListerner并在重写的OnClick方法中处理相关的事件。

为开始按钮添加开始计时的监听:

private void initListenter() {        btn_start.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                chro.setBase(SystemClock.elapsedRealtime()-recordtime);//开始计时的时间                chro.start();//开始计时            }        });

使用setBase()方法为计时器设置开始时间,SystemClock.elapseRealtime()方法返回的是一个long类型的数据,表示手机从开机到当前一共经过了多少毫秒,为了在点击停止计时按钮之后能从停止的时间开始计时,在后面减去了一个recordtime,recordtime记录的是停止计时的时候所显示的时间。

接着为停止按钮添加监听:

btn_stop.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                chro.stop();//停止计时                recordtime = SystemClock.elapsedRealtime()-chro.getBase();            }        });

当点击停止按钮时执行stop()方法,计时器停止计时,显示的时间为停止计时之前的时间。之后记录计时器计时的时间,再用手机当前的时间减去计时器开始计时的时间:SystemClock.elasedRealtime()-chro.getBase()得到一个记录了计时的时间的long类型的数据。

最后在为重新计时按钮添加监听:

btn_reset.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                chro.setBase(SystemClock.elapsedRealtime());                recordtime = 0;                chro.stop();            }        });

重新计时点击后,重新设置计时开始的时间,并将记录时间的recordtime变量设为0。

另外定时器显示的时间是从Base设置的时间到当前的时间,所以当setBase()=SystemClock.elapsedRealtime()-recordtime;之后,显示的就是recordtime,相当于在当前时间之前的recordtime时间就开始计时,计时到当前时间,显示的就自然是recordtime。

图示显示时间

0 0
原创粉丝点击