Android Chronometer 计时器

Android Chronometer(计时器) 可以用来制作一个简单的计时器或者倒计时

Chronometer

创建一个 Chronometer 很简单

<Chronometer
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" />

下面我们就来制作一个简单的计时器吧

  1. 创建一个 空的 Android 项目 cn.twle.android.Chronometer

  2. 修改 activity_main.xml 添加两个按钮

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout 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"
        android:padding="8dp" 
        android:orientation="vertical" >
    
        <Chronometer
            android:id="@+id/chronometer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    
  3. 修改 MainActivity.java

    package cn.twle.android.chronometer;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.widget.Chronometer;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Chronometer chronometer =  (Chronometer) findViewById(R.id.chronometer);
    
            chronometer.start();
        }
    }
    

运行效果如下

默认情况下,Chronometer 控件会以 "MM:SS" 或 "H:MM:SS" 格式显示当前时间,我们也可以使用 setFormat(String) 方法设置为其它的格式

Chronometer 控件可以使用 elapsedRealtime() 方法设置起始时间,如果未设置起始时间,就会在调用 start() 方法时使用当前时间作为起始时间

Chronometer 控件也可以用来开发一个倒计时,可以使用 setCountDown(boolean) 方法来设置剩余时间

Chronometer 属性

属性 说明
android:countDown boolean, 设置 Chronometer 是否倒计时
android:format string,设置 Chronometer 显示的格式,Android 会以第一个 %s 来代替 "MM:SS" or "H:MM:SS"

Chronometer 主要方法

方法 说明
isCountDown() 设置是否倒计时
start() 开启 Chronometer
stop() 停止 Chronometer

范例: 完整的计时器

  1. 复用上面的 demo

  2. 修改 activity_main.xml 添加 Chronometer 和 四个按钮

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:orientation="vertical">
    
        <Chronometer
            android:id="@+id/chronometer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="#ff0000"
            android:textSize="60dip" />
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dip"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/btnStart"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="开始记时" />
    
            <Button
                android:id="@+id/btnStop"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="停止记时" />
    
            <Button
                android:id="@+id/btnReset"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="重置" />
    
            <Button
                android:id="@+id/btn_format"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="格式化" />
        </LinearLayout>
    
    </LinearLayout>
    
  3. 修改 MainActivity.java

    package cn.twle.android.chronometer;
    
    import android.os.SystemClock;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.widget.Chronometer;
    import android.widget.Button;
    import android.widget.Toast;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener,Chronometer.OnChronometerTickListener{
    
        private Chronometer chronometer;
        private Button btn_start,btn_stop,btn_base,btn_format;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
        }
    
        private void initView() {
            chronometer = (Chronometer) findViewById(R.id.chronometer);
            btn_start = (Button) findViewById(R.id.btnStart);
            btn_stop = (Button) findViewById(R.id.btnStop);
            btn_base = (Button) findViewById(R.id.btnReset);
            btn_format = (Button) findViewById(R.id.btn_format);
    
            chronometer.setOnChronometerTickListener(this);
            btn_start.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
            btn_base.setOnClickListener(this);
            btn_format.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btnStart:
                    chronometer.start();// 开始计时
                    break;
                case R.id.btnStop:
                    chronometer.stop();// 停止计时
                    break;
                case R.id.btnReset:
                    chronometer.setBase(SystemClock.elapsedRealtime());// 复位
                    break;
                case R.id.btn_format:
                    chronometer.setFormat("Time:%s");// 更改时间显示格式
                    break;
            }
        }
    
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            String time = chronometer.getText().toString();
            if(time.equals("00:00")){
                Toast.makeText(MainActivity.this,"时间到了~",Toast.LENGTH_SHORT).show();
            }
        }
    }
    

范例: 倒计时

  1. 复用上面的 demo

  2. 修改 activity_main.xml 添加 Chronometer 和 一个按钮

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <Chronometer
            android:id="@+id/chronometer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:countDown="true"
            android:textColor="#ff0000"
            android:textSize="60dip" />
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dip"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/btnStart"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="开始" />
    
            <Button
                android:id="@+id/btnReset"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="重置" />
    
        </LinearLayout>
    
    </LinearLayout>
    
  3. 修改 MainActivity.java

    package cn.twle.android.chronometer;
    
    import android.os.SystemClock;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.widget.Chronometer;
    import android.widget.Toast;
    import android.widget.Button;
    
    import android.view.View;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import javax.xml.datatype.Duration;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener,Chronometer.OnChronometerTickListener{
    
        static final long Durtime = 3;
    
        private long leftTime = Durtime;
    
        private Chronometer chronometer;
        private Button btn_start,btn_stop,btn_base,btn_format;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
        }
    
        private void initView() {
            chronometer = (Chronometer) findViewById(R.id.chronometer);
            btn_start = (Button) findViewById(R.id.btnStart);
            btn_base = (Button) findViewById(R.id.btnReset);
    
            chronometer.setOnChronometerTickListener(this);
            btn_start.setOnClickListener(this);
            btn_base.setOnClickListener(this);
    
            setChronometerText();
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btnStart:
                    chronometer.start();// 开始计时
                    break;
                case R.id.btnReset:
                    chronometer.stop(); // 停止计时
                    chronometer.setBase(SystemClock.elapsedRealtime());// 复位
                    leftTime = Durtime;
                    setChronometerText();
                    break;
            }
    
        }
    
        @Override
        public void onChronometerTick(Chronometer chronometer) {
    
            leftTime--;
            setChronometerText();
    
            if(leftTime == 0 ){
                Toast.makeText(MainActivity.this,"时间到了~",Toast.LENGTH_SHORT).show();
    
                chronometer.stop();
                return;
            }
    
        }
    
        public void setChronometerText()
        {
            Date d = new Date(leftTime * 1000);
    
            SimpleDateFormat timeFormat = new SimpleDateFormat("mm:ss");
    
            chronometer.setText(timeFormat.format(d));
        }
    
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.