计时器

       Android提供了一个计时器组件:Chronometer,该组件与DigitalClock都继承自TextView,因此他们都会显示一段文本。但Chrnometer并不显示当前时间,它显示的是从某个起始时间开始,一共过去了多长时间。

      Chronometer的用法也很简单,它只提供了一个android:format属性,用于指定计时器的计时格式。除此之外,Chronometer支持如下常用方法。

  • setBase(long base):设置计时器的时间格式。
  • setFormat(String format):设置显示时间的格式。
  • start():开始计时
  • stop():停止计时
  • setOnChronemeterTickListener(Chronometer.OnChronometerTickListener listener):为计时器绑定事件监听器,当计时器改变时触发该监听器。

     下面的程序简单示范了Chronometer的用法,该程序界面中定义了一个Chronometer组件和一个Button组件。当用户单击Button时系统开始计时,当计时超过20秒时停止计时。

      下面是该程序的代码。   

  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center_horizontal"
    >
<Chronometer android:id="@+id/test"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             />
<Button android:id="@+id/start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="开始"
    android:textSize="14dp" />

</LinearLayout>

后台代码:

 

package org.crazyit.helloworld;

import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.*;
import android.widget.*;
import android.widget.Chronometer.*;

public class ChronometerTest extends Activity {
   Chronometer ch;
   Button start;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chronometer_test);
        //获取计时器组件
        ch=(Chronometer)findViewById(R.id.test);
        //获取"开始"按钮
        start=(Button)findViewById(R.id.start);
        start.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View source) {
                // TODO Auto-generated method stub
                //设置开始计时的时间
                ch.setBase(SystemClock.elapsedRealtime());
                //启动计时器
                ch.start();
                start.setEnabled(false);
            }
        });
        //为Chronometer绑定事件监听器
        ch.setOnChronometerTickListener(new OnChronometerTickListener(){

            @Override
            public void onChronometerTick(Chronometer chronometer) {
                // TODO Auto-generated method stub
                //如果从开始计时到现在超过了20s
                if(SystemClock.elapsedRealtime()-ch.getBase()>20*1000)
                {
                    ch.stop();
                    start.setEnabled(true);
                }
            }
        });
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.chronometer_test, menu);
        return true;
    }

}

    程序中用到的SystemClock类仅仅是一个获取系统时间、运行时间的工具类,用法很简单。

   运行上面的Activity得到图2.28所示效果

  图2.28  计时器

posted @ 2013-09-29 08:49  TealerProg  Views(354)  Comments(0Edit  收藏  举报