Android基础之计时器

本文详细介绍了Android中Chronometer组件的使用方法,包括如何设置计时器的起始时间、显示格式以及如何实现开始、停止和重置计时等功能。

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。

图示显示时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值