Chronometer

继承自TextView,因此都能显示文本。但是计时器并不显示当前时间,
只显示从某个时间开始,一共过去了多长时间
android:format=”计时:%s”
setBase(long):设置开始时间//设置时间基准
start():启动定时器
stop():停止定时期
SystemClock.elapsedRealtime()获取从开启手机到现在的毫秒数,包括待机时间,是一个工具类
通过按钮开始定时和结束定时
或者用下面定时器到时间后自动结束定时:
ch.setOnChronometerTickListener(OnChronometerTickListener listener)
如:1分钟停止定时
if(SystemClock.elapsedRealtime()-ch.getBase()>1*1000*60){ch.stop();}

<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"
    tools:context="com.xspacing.chronometer.MainActivity" >

    <Chronometer
        android:id="@+id/main_chronometer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:layout_marginLeft="128dp"
        android:layout_marginTop="89dp"
        android:format="计时:%s"
        android:textColor="#aaa"
        android:textSize="30sp" />

    <Button
        android:id="@+id/main_btn_restart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/main_btn_start"
        android:text="重新计时" />

    <Button
        android:id="@+id/main_btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/main_chronometer"
        android:layout_marginTop="80dp"
        android:text="开始计时" />

    <Button
        android:id="@+id/main_btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/main_btn_restart"
        android:layout_alignBottom="@+id/main_btn_restart"
        android:layout_centerHorizontal="true"
        android:text="停止计时" />

</RelativeLayout>
package com.xspacing.chronometer;

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import com.xspacing.chronometer.R;

/**
 * @ClassName MainActivity.java
 * @Description 计时器
 * @author Smile
 * @version v1.0
 * @date 2016年9月20日 上午11:31:29
 */
public class MainActivity extends Activity implements OnClickListener {

    private Button mBtn_start;
    private Button mBtn_stop;
    private Button mBtn_restart;
    private Chronometer mChronometer;
    private long mRecordTime; // 记录停止时间

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        initListener();
    }

    private void initViews() {
        mBtn_start = (Button) findViewById(R.id.main_btn_start);
        mBtn_stop = (Button) findViewById(R.id.main_btn_stop);
        mBtn_restart = (Button) findViewById(R.id.main_btn_restart);
        mChronometer = (Chronometer) findViewById(R.id.main_chronometer);
    }

    private void initListener() {
        mBtn_start.setOnClickListener(this);
        mBtn_stop.setOnClickListener(this);
        mBtn_restart.setOnClickListener(this);
        // 监听计时器
        mChronometer.setOnChronometerTickListener(new OnChronometerTickListener() {

            @Override
            public void onChronometerTick(Chronometer chronometer) {

            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.main_btn_start:
            // SystemClock.elapsedRealtime()模拟器开启到现在的时间
            mChronometer.setBase(SystemClock.elapsedRealtime() - mRecordTime); // 设置基准时间,开始计时的时间
            mChronometer.start();
            break;
        case R.id.main_btn_stop:
            mChronometer.stop();
            mRecordTime = SystemClock.elapsedRealtime() - mChronometer.getBase();
            break;
        case R.id.main_btn_restart:
            mChronometer.setBase(SystemClock.elapsedRealtime()); // 设置基准时间,开始计时的时间
            break;
        default:
            break;
        }
    }

}
`Chronometer` 是 Android 中用于显示计时的组件,以下是其使用方法: #### 1. 在布局文件中添加 `Chronometer` 在 `res/layout` 目录下的 XML 文件中添加 `Chronometer` 组件,示例代码如下: ```xml <Chronometer android:id="@+id/chronometer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" /> ``` #### 2. 在 Java 或 Kotlin 代码中控制 `Chronometer` 以下是 Java 和 Kotlin 的示例代码: **Java 示例** ```java import android.os.Bundle; import android.widget.Chronometer; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private Chronometer chronometer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); chronometer = findViewById(R.id.chronometer); // 开始计时 chronometer.start(); // 停止计时 // chronometer.stop(); // 设置计时起始时间 // chronometer.setBase(SystemClock.elapsedRealtime()); // 设置计时格式 // chronometer.setFormat("Time: %s"); // 添加计时变化监听器 chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { // 计时每变化一次执行的操作 } }); } } ``` **Kotlin 示例** ```kotlin import android.os.Bundle import android.widget.Chronometer import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { private lateinit var chronometer: Chronometer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) chronometer = findViewById(R.id.chronometer) // 开始计时 chronometer.start() // 停止计时 // chronometer.stop() // 设置计时起始时间 // chronometer.base = SystemClock.elapsedRealtime() // 设置计时格式 // chronometer.format = "Time: %s" // 添加计时变化监听器 chronometer.setOnChronometerTickListener { // 计时每变化一次执行的操作 } } } ``` ### 方法说明 - `start()`:开始计时,此方法修改了 `mStarted` 的状态,然后调用 `updateRunning()` [^1]。 - `stop()`:停止计时,同样修改了 `mStarted` 的状态,然后调用 `updateRunning()` [^1]。 - `setBase(long base)`:设置计时的起始时间,通常使用 `SystemClock.elapsedRealtime()` 作为参数。 - `setFormat(String format)`:设置计时的显示格式,例如 `"Time: %s"`。 - `setOnChronometerTickListener(OnChronometerTickListener listener)`:添加计时变化监听器,计时每变化一次,监听器的 `onChronometerTick` 方法会被调用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值