java,new Handler().postDelayed(new Runnable() {, @Override, public void run() {, // 计时器代码, },}, 1000); // 延迟1秒执行,
“
Android编程下的计时器代码
在Android开发中,计时器是一个常见的功能,用于实现倒计时、定时提醒等功能,以下是使用Handler和Runnable实现简单计时器的示例代码。
一、布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/timerTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="48sp" android:layout_centerInParent="true"/> <Button android:id="@+id/startButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Timer" android:layout_below="@id/timerTextView" android:layout_centerHorizontal="true" android:layout_marginTop="20dp"/> </RelativeLayout>
二、MainActivity.java
package com.example.timerapp; import android.os.Bundle; import android.os.Handler; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private TextView timerTextView; private Button startButton; private int timeLeftInMillis = 60000; // 1 minute in milliseconds private boolean timerRunning = false; private Handler handler = new Handler(); private Runnable updateRunnable = new Runnable() { @Override public void run() { if (timeLeftInMillis > 0) { timeLeftInMillis -= 1000; int seconds = (int) (timeLeftInMillis / 1000) % 60; int minutes = (int) (timeLeftInMillis / (1000 60)) % 60; String timeLeftFormatted = String.format("%02d:%02d", minutes, seconds); timerTextView.setText(timeLeftFormatted); handler.postDelayed(this, 1000); } else { timerTextView.setText("Time's up!"); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); timerTextView = findViewById(R.id.timerTextView); startButton = findViewById(R.id.startButton); startButton.setOnClickListener(v -> { if (!timerRunning) { timerRunning = true; timeLeftInMillis = 60000; // Reset the timer to 1 minute handler.postDelayed(updateRunnable, 1000); } }); } }
三、代码解释
部分 | 解释 |
布局文件 | 包含一个用于显示时间的TextView 和一个启动计时器的Button ,Button 位于TextView 下方居中对齐。 |
MainActivity.java | 定义了计时器相关的变量和逻辑。timeLeftInMillis 表示剩余时间(以毫秒为单位),初始值为60000毫秒(1分钟)。timerRunning 用于标记计时器是否正在运行。handler 和updateRunnable 用于实现每秒更新一次时间显示,在onCreate 方法中,初始化界面元素并为Button 设置点击监听器,当点击按钮且计时器未运行时,启动计时器并重置时间为1分钟。updateRunnable 的run 方法中,每秒减少timeLeftInMillis 的值,并更新TextView 显示的时间格式,当时间用完时,显示“Time’s up!”。 |
四、相关问题与解答
解答:可以通过修改timeLeftInMillis
变量的初始值来设置不同的初始时间,将初始值改为30000(30秒),则代码为private int timeLeftInMillis = 30000;
。
解答:可以在updateRunnable
的run
方法中,当timeLeftInMillis <= 0
时,添加需要执行的特定操作代码,弹出一个提示框,可以使用以下代码:
if (timeLeftInMillis <= 0) { timerTextView.setText("Time's up!"); // 执行特定操作,如弹出提示框 new AlertDialog.Builder(MainActivity.this) .setTitle("Timer Finished") .setMessage("The timer has finished!") .setPositiveButton("OK", null) .show(); }