实现番茄钟倒计时应用:设置时间、计时提醒,还有猫咪装饰
实现番茄钟倒计时应用:设置时间、计时提醒,还有猫咪装饰
本篇将带你实现一个番茄钟倒计时应用,用户可以设置专注时间和休息时间的时长,点击“开始专注”或“开始休息”按钮启动计时,应用会在倒计时结束时进行提醒。
众多之人觉着时间匮乏难以够用,实则你仅仅缺无一个简约且具卓效的管理工具。于今日际,我们着手去制出一个专属的番茄钟,能够助力你将散落碎片之时间转变为成效显著片段焉。
功能设计思路
番茄钟应用的关键在于进行交替计时,用户得去设置两个重要参数,分别是专注所用时长,以及休息所用时长,一般情况下,专注的时间设定为25分钟,而休息时间设定成5分钟,这样的间隔吻合人体注意力方面的规律。
应用得提供明晰的计时界面,还有灵活的控制按钮。界面于中央展示倒计时数字,在下方安置“开始专注”与“开始休息”俩主要按钮。计时结束之际要给出确切提示,像弹窗或者声音提醒 。
界面布局规划
我们将界面分作三个主要区域,顶部是时间设置区,通过数字输入框利于用户调整专注以及休息时长。中间之为显示区,依靠大号字体呈现剩余时间着呢。底部为控制区,于此处放置操作方面的按钮以及猫咪的图片哟。
以构成装饰元素的猫咪图片,能够置于界面的右下角之处。静态图片或者简短动画是可供选择的对象,这样干,既能增添趣味性,又不会达成影响用户注意力使分散。图片尺寸适宜得很适中,防止太多地占用巨大屏幕空间。
核心代码实现
靠定时器能力去做到倒计时呈现情况的展现呢。JavaScript里头呀,能够凭借setInterval函数每秒来更改显示状态时间哟,当计时变为零的时候喽,得去除掉当前那定时器且引发提示这个效能产生啦。
按钮被点击这件事情要对状态切换进行处理,当“开始专注”这个按钮被人们点击的时候,要去读取预先就设置好的专注的时长,然后开启倒计时,与此同时,还要将设置时所使用的功能给禁止掉,避免它出现错误的操作情况。等到计时结束了以后,会自动地切换到休息的阶段那里去。
// 文件名:PomodoroTimerPage.ets
// 定义番茄钟倒计时页面组件
@Component
export struct PomodoroTimerPage {
@State focusTime: number = 25 * 60; // 默认专注时间为25分钟(单位:秒)
@State breakTime: number = 5 * 60; // 默认休息时间为5分钟(单位:秒)
@State timeLeft: number = this.focusTime; // 倒计时时间
@State isFocusMode: boolean = true; // 当前阶段:专注或休息
@State isCountingDown: boolean = false; // 倒计时状态
private timerId: number | null = null; // 定时器 ID
// 构建页面布局和组件
build() {
Column({ space: 20 }) { // 创建垂直布局容器,子组件间距为 20
// 显示猫咪图片
Image($r('app.media.cat'))
.width('22%')
.height('49%')
.margin({ bottom: 20 })
.alignSelf(ItemAlign.Center);
// 显示当前阶段
Text(this.isFocusMode ? '专注时间' : '休息时间')
.fontSize(24)
.fontWeight(FontWeight.Bold)
.alignSelf(ItemAlign.Center);
// 显示倒计时时间
Text(`剩余时间: ${this.formatTime(this.timeLeft)}`)
.fontSize(20)
.alignSelf(ItemAlign.Center)
.fontColor(this.timeLeft > 0 ? Color.Black : Color.Red);
// 开始倒计时按钮
Button(this.isCountingDown ? '暂停' : (this.isFocusMode ? '开始专注' : '开始休息'))
.onClick(() => {
if (this.isCountingDown) {
this.pauseCountdown();
} else {
this.startCountdown();
}
})
.fontSize(20)
.backgroundColor(this.isCountingDown ? Color.Red : (this.isFocusMode ? Color.Blue : Color.Green))
.fontColor(Color.White)
.margin({ top: 20 });
// 重置按钮
Button('重置')
.onClick(() => this.resetCountdown())
.fontSize(20)
.backgroundColor(Color.Gray)
.fontColor(Color.White)
.margin({ top: 10 });
// 设置专注时间和休息时间
Row({ space: 10 }) {
TextInput({ placeholder: '设置专注时间(分钟)' })
.type(InputType.Number)
.onChange((value: string) => {
this.focusTime = (parseInt(value) || 25) * 60;
if (this.isFocusMode) {
this.timeLeft = this.focusTime;
}
});
TextInput({ placeholder: '设置休息时间(分钟)' })
.type(InputType.Number)
.onChange((value: string) => {
this.breakTime = (parseInt(value) || 5) * 60;
if (!this.isFocusMode) {
this.timeLeft = this.breakTime;
}
})
}
.justifyContent(FlexAlign.Center)
}
.padding(20)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Center);
}
// 格式化倒计时时间
private formatTime(seconds: number): string {
const minutes = Math.floor(seconds / 60);
const remainingSeconds = seconds % 60;
return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
}
// 开始倒计时的方法
private startCountdown() {
this.isCountingDown = true;
this.timerId = setInterval(() => {
if (this.timeLeft > 0) {
this.timeLeft -= 1;
} else {
this.switchMode(); // 切换到下一个阶段
}
}, 1000);
}
// 暂停倒计时的方法
private pauseCountdown() {
this.isCountingDown = false;
if (this.timerId !== null) {
clearInterval(this.timerId);
this.timerId = null;
}
}
// 重置倒计时的方法
private resetCountdown() {
this.pauseCountdown();
this.timeLeft = this.isFocusMode ? this.focusTime : this.breakTime;
}
// 切换专注和休息阶段
private switchMode() {
this.pauseCountdown();
this.isFocusMode = !this.isFocusMode;
this.timeLeft = this.isFocusMode ? this.focusTime : this.breakTime;
}
}
状态管理逻辑
应用得对四种状态予以跟踪,这四种状态为空闲、处于专注当中、正在休息、处于暂停态势。并且,每一回状态发生变更之际,都得去更新界面的相应显示情况。举例来讲,当由专注的状态转换到休息的状态之时,就得去重置计时器,同时改变界面的颜色来给出提示 。
// 文件名:Index.ets
// 导入番茄钟倒计时页面组件
import { PomodoroTimerPage } from './PomodoroTimerPage'
// 定义应用入口组件
@Entry
@Component
struct Index {
build() {
Column() {
PomodoroTimerPage() // 引用番茄钟页面组件
}
.padding(20) // 设置页面内边距
}
}
含剩余秒数、当前所用模式以用总时长等在内的这般东西构成了其中的状态数据,这些所说的数据需予以归集存放,不管那界面发生怎样的改变都完全围绕这些既定状态之值,每当状态遭受了改变之际就得立刻马上更新本地的存储,其主要目的在于避免因开展那页面刷新行动而致丢失相应的进度 。
交互细节优化
进行倒计时显示时,是需要开展格式化处 理的,要把其余残余的秒数变换为“分:秒”这样的格式,就好像“25:00”这种样子的,相应的数字应当大到足够让人一看便非常清楚明白,而进度提示的呈现可用环形进度条,如此这般能使时间消耗清晰直接可见。
当要进行声音提醒呀,需酌情选取柔和且不刺耳的音效呢。倘若专注结束啦,那就采用稍显急促些的提示音哟。而要是休息结束了呢,便使用舒缓的音效啦。用户能够对提示音进行开关操作呀,以此来适配不同的使用环境呢。
扩展功能设想
拥有数据统计功能这件事颇具价值,它能够记录每日已然完成的番茄钟数量,进而生成简易的报表,凭借此,用户得以查看自身的专注趋向,并且对工作时间分配做出调节 。
使其增添实用性的是个性化设置,它许可进行猫咪图片的更换,能挑选各异的提醒声音,还可设定自动开启下一阶段等情况,正是这些细微之处,致使该应用更符合个人的使用习性。
有无准备好去制作属于自身的番茄钟呀?于时间管理范畴层面,遭遇过什么样特别具实效性颇为有效的技巧呢?于评论区热烈欢迎分享个人的经验经历,要是觉着这一部分文章作品较为有用有益,请进行点赞予以支持。