Chronometer计时器

(这不算是Materual Design中的新控件,只是第一次用到特此记录一下)
安卓提供了一个计时器组件:Chronometer,该组件extends TextView,因此都会显示一段文本,但是它显示的时间是从某个起始时间开始过去了多少时间,它只提供了android:format一个属性用于指定计时器的计数格式。

Chronometer的用法很简单,它支持如下用法:

  • getBase():返回时间。
  • setBase(long base):设置计时器的起始时间。
  • start():开始计时。
  • stop():停止计时。
  • setFormat(String format):设置显示时间的格式。
  • setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):为计时器绑定监听事件。

示例:

一个一分钟的计时器:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Chronometer
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/chronometer"
        android:textColor="#ff0303"
        android:textSize="12pt"
        android:layout_gravity="center_horizontal"
        android:focusable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动"
        android:id="@+id/button"
        android:layout_gravity="center_horizontal" />
  
</LinearLayout>
public class MainActivity extends AppCompatActivity {

    Chronometer ch ;
    Button  start ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
//        获取计时器组件
        ch=(Chronometer)findViewById(R.id.chronometer);
//        获取开始组件
        start = (Button)findViewById(R.id.button);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置开始计时时间
                ch.setBase(SystemClock.elapsedRealtime()-timeDifference*1000);//timeDifference真正想要显示的时间 单位秒
                //启动计时器
                ch.start();
            }
        });
        //为计时器绑定监听事件
        ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener()
        {
            @Override
            public void onChronometerTick(Chronometer ch)
            {
                // 如果从开始计时到现在超过了60s
                if (SystemClock.elapsedRealtime() - ch.getBase() > 60 * 1000 {
                    ch.stop();
                    start.setEnabled(true);
                }
            }
        });
    }
}

效果图:

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。