android实现可暂停/继续的计时器

代码

使用控件Chronometer即可实现,很简单

xml布局

先看xml布局,有两个button,一个Chronometer控件和一个提示录制状态的TextView空间

<?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:layout_gravity="center"
    android:orientation="vertical"
    android:background="@drawable/pic4"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:orientation="vertical"
        android:gravity="center">
        <TextView
            android:id="@+id/text1"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="center"
            android:text="正在录音"
            android:textSize="35dp"
            android:textColor="#000000"
            android:visibility="invisible"
        />
        <Chronometer
                 android:layout_width="match_parent"
                 android:layout_height="200dp"
                 android:format="00:00:00"
                 android:gravity="center"
                 android:textSize="70dp"
                 android:id="@+id/timer"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_gravity="center">
        <Button
            android:id="@+id/start"
            android:layout_width="120dp"
            android:layout_height="60dp"
            android:layout_gravity="center"
            android:text="开始"
            android:textStyle="bold"
            android:layout_marginTop="10dp"
            android:background="@drawable/bt_shape"
            android:textColor="#000000"
            android:onClick="start"

            >

        </Button>
        <Button
            android:id="@+id/stop"
            android:layout_width="120dp"
            android:layout_height="60dp"
            android:layout_gravity="center"
            android:text="停止"
            android:layout_marginTop="10dp"
            android:background="@drawable/bt_shape"
            android:textColor="#000000"
            android:textStyle="bold"
            android:onClick="stop"
            android:visibility="invisible"
            >

        </Button>
    </LinearLayout>
</LinearLayout>

java控制代码

package com.example.myaudiorecorder;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.Chronometer;
import android.view.View;
import android.os.SystemClock;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private Chronometer timer;
    private int state;//是否已经开始录音,0-停止,1-开始,2-暂停
    private Button startButtom;
    private Button stopButton;
    private TextView note;
    private static  long elaspedTime = 0;//继续暂停时间,方便暂停后继续计时

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timer = (Chronometer) findViewById(R.id.timer);
        startButtom= (Button)findViewById(R.id.start);
        stopButton=(Button)findViewById(R.id.stop) ;
        note =(TextView)findViewById(R.id.text1);
        state=0;
    }

    public void start(View view){
        //stopButton.setEnabled(true);
        stopButton.setVisibility(View.VISIBLE);//设置停止按钮可见
        if(state==0){//开始录音
            state=1;
            startButtom.setText("暂停");
            timer.setBase(SystemClock.elapsedRealtime());//计时器清零
            int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 3600);

            timer.setFormat("0"+String.valueOf(hour)+":%s");
            //Log.d("start:",String.valueOf(SystemClock.elapsedRealtime() - timer.getBase()));
            timer.start();

            note.setVisibility(View.VISIBLE);
        }
        else if(state==1){//点击了暂停
            timer.stop();
            //Log.d("pause:",String.valueOf(SystemClock.elapsedRealtime() - timer.getBase()));
            //保存暂停时间,方便后续继续开始,时间不会错
            elaspedTime = SystemClock.elapsedRealtime()-timer.getBase();
            state=2;
            startButtom.setText("开始");
            note.setText("已暂停");//提示栏

        }
        else {//暂停后重新开始
        	//重新设置基准
            timer.setBase(SystemClock.elapsedRealtime()-elaspedTime);
            int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 3600);
            timer.setFormat("0"+String.valueOf(hour)+":%s");
            //Log.d("restart:",String.valueOf(SystemClock.elapsedRealtime() - timer.getBase()));
            timer.start();
            state=1;
            startButtom.setText("暂停");
            note.setText("正在录音");//提示栏

        }
    }

    public void stop(View view){
        elaspedTime=0;
        state=0;
        startButtom.setText("开始");
        stopButton.setVisibility(View.INVISIBLE);//同时设置停止按钮不可见
        note.setVisibility(View.INVISIBLE);
        timer.setBase(SystemClock.elapsedRealtime());//计时器清零
        timer.setFormat("00:%s");
        timer.stop();


    }

}

效果图

开始计时前只有一个开始按钮
在这里插入图片描述
开始计时后,弹出“停止”按钮可停止计时,同时“开始”按钮变为“暂停”按钮
在这里插入图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的Java计时器,包括开始,暂停,恢复和停止功能。你可以根据自己的需求进行修改。 ```java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; public class Stopwatch implements ActionListener { JFrame frame = new JFrame(); JPanel panel = new JPanel(); JLabel timeLabel = new JLabel(); Timer timer = new Timer(1000, this); int elapsedTime = 0; int seconds = 0; int minutes = 0; int hours = 0; boolean started = false; String secondsString = String.format("%02d", seconds); String minutesString = String.format("%02d", minutes); String hoursString = String.format("%02d", hours); String time = hoursString + ":" + minutesString + ":" + secondsString; public Stopwatch() { timeLabel.setText(time); panel.add(timeLabel); frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Stopwatch"); frame.pack(); frame.setVisible(true); } public void start() { started = true; timer.start(); } public void pause() { started = false; timer.stop(); } public void resume() { started = true; timer.start(); } public void reset() { started = false; timer.stop(); elapsedTime = 0; seconds = 0; minutes = 0; hours = 0; secondsString = String.format("%02d", seconds); minutesString = String.format("%02d", minutes); hoursString = String.format("%02d", hours); time = hoursString + ":" + minutesString + ":" + secondsString; timeLabel.setText(time); } public void actionPerformed(ActionEvent e) { elapsedTime = elapsedTime + 1000; hours = (elapsedTime / 3600000); minutes = (elapsedTime / 60000) % 60; seconds = (elapsedTime / 1000) % 60; secondsString = String.format("%02d", seconds); minutesString = String.format("%02d", minutes); hoursString = String.format("%02d", hours); time = hoursString + ":" + minutesString + ":" + secondsString; timeLabel.setText(time); } public static void main(String[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.start(); } } ``` 上面的代码创建了一个简单的图形用户界面,包括一个计时器标签和四个按钮:开始,暂停,恢复和停止。计时器标签显示经过的时间。`start()` 方法启动计时器,`pause()` 方法暂停计时器,`resume()` 方法恢复计时器,`reset()` 方法重置计时器。`actionPerformed()` 方法是计时器的核心,每秒更新计时器标签。在 `main()` 方法中,创建了一个新的 `Stopwatch` 对象,并调用 `start()` 方法开始计时器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值