在android studio上开发Stopwatch app:要求点击“start”按钮开始计时;点击"stop"按钮停止计时;点击"reset"按钮计时清零。要求旋转屏幕能正常计时,App放入后台、App失去焦点两种情况下能暂停,然后继续计时的详细步骤
时间: 2024-10-06 19:04:28 浏览: 31
秒表计时器以及STOPWATCH(实例讲解)
在Android Studio上开发一个Stopwatch应用,需要遵循以下步骤:
1. **创建新项目**:
- 创建一个新的Android项目,选择Empty Activity作为模板。
2. **设计用户界面**:
- 在`activity_main.xml`中,添加三个按钮(start, stop, reset),一个大一些的TextView用于显示计时结果。同时,确保所有UI元素是响应旋转屏幕的。
```xml
<!-- activity_main.xml -->
<LinearLayout ...>
...
<Button
android:id="@+id/startButton"
android:text="开始"/>
<Button
android:id="@+id/stopButton"
android:text="停止"/>
<Button
android:id="@+id/resetButton"
android:text="重置"/>
<TextView
android:id="@+id/timerTextView"
android:text="00:00:00"
android:singleLine="true"
android:gravity="center"/>
</LinearLayout>
```
3. **编写核心逻辑**:
- 在`MainActivity.java` 或 `MainActivity.kt`中,引入`CountDownTimer` 或者自定义`Handler`来实现计时逻辑。创建一个`CountdownTimer`实例来保存当前状态,当开始计时时启动,停止时停止,重置时清除计数。
```java
private CountDownTimer countDownTimer;
private long startTime;
private boolean isRunning = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton.setOnClickListener(v -> {
if (!isRunning) {
startButton.setText("停止");
startTime = System.currentTimeMillis();
countDownTimer = new CountDownTimer(0, 1000) {
@Override
public void onTick(long millisUntilFinished) {
updateTimer();
}
@Override
public void onFinish() {
stopButton.setEnabled(true);
resetButton.setEnabled(true);
countDownTimer.cancel();
isRunning = false;
}
};
countDownTimer.start();
} else {
// 停止计时
countDownTimer.cancel();
startButton.setText("开始");
resetButton.setEnabled(false);
}
});
stopButton.setOnClickListener(v -> {
if (isRunning) {
isRunning = false;
countDownTimer.cancel();
}
});
resetButton.setOnClickListener(v -> {
if (countDownTimer != null && !countDownTimer.isCancelled()) {
countDownTimer.cancel();
isRunning = false;
startButton.setText("开始");
timerTextView.setText("00:00:00");
}
});
}
private void updateTimer() {
long elapsedSeconds = (System.currentTimeMillis() - startTime) / 1000;
int elapsedMinutes = (int) Math.floor(elapsedSeconds / 60);
int elapsedSecondsDecimal = (int) (elapsedSeconds % 60);
timerTextView.setText(String.format("%02d:%02d", elapsedMinutes, elapsedSecondsDecimal));
}
```
4. **响应屏幕旋转**:
- 配置`AndroidManifest.xml`,在`<activity>`标签里添加`android:configChanges="orientation|screenSize"`来允许Activity在屏幕方向改变时自动调整布局。
5. **处理后台和失去焦点**:
- 为了在App进入后台或失去焦点时暂停计时,你需要实现`onPause()` 和 `onResume()` 方法,在`onPause()` 中停止计时,`onResume()` 中恢复计时。如果App完全关闭再打开,记得在`onCreate()` 时检查并从存储恢复计时器状态。
6. **存储和加载数据**:
- 可以使用SharedPreferences来保存计时器的状态,当App启动时读取并初始化计时器。
7. **测试**:
- 确保在各种情况下(如点击按钮,旋转屏幕,切换其他应用等)计时器都能正确工作。
阅读全文