简约之美:开发计时器应用,探索计时器的巧妙运用(1) 原创
今天,我投入了精力开发了一个计时器应用,它会陆续具备了正计时和倒计时两种实用的功能。在这次开发过程中,我深刻感受到了技术的简约之美,简单的设计同样能够发挥巨大的作用。
计时钟效果
场景介绍
正计时功能的应用场景是这样的:
想象你是一位热衷于手工艺的艺术家,正在创作一件作品。每当你开始一个新的项目,你便会启动正计时器,它如同你的助手,默默地记录下你在每一件作品上投入的时间。这样的记录不仅帮助你了解自己的创作节奏,还能在作品完成后,向他人展示你的专注与投入。
至于倒计时功能,它的应用场景则略有不同:
设想你正在准备一场重要的网络会议,你需要确保在会议开始前完成所有的准备工作。设置一个倒计时,它会在距离会议开始还有一段时间时提醒你,这样你就可以有条不紊地安排每一步,确保万无一失。
在实现这个计时器时,我们采用了HarmonyOS NEXT的TextTimer组件。这个组件的使用体验非常流畅,使得我们能够高效地完成计时器的核心功能搭建。以下是我的一些开发心得:
正计时器的开发相对直接,我们通过简单的用户界面操作,就能实现计时的启动、暂停和重置。用户可以清晰地看到时间的增加,从而更好地管理自己的活动。
倒计时器的开发则更为考验细节处理。用户可以自定义倒计时的时间,而当计时结束时,计时器会自动提醒。在这个过程中,我们需要考虑到用户的操作便捷性和体验。
代码介绍——正计时
初始化数据
textTimerController: TextTimerController = new TextTimerController()
@State countMode: boolean = true
countUp: string = '正计时 => 倒计时';
countDown: string = '倒计时 => 正计时'
countDownDate: Date = new Date();
-
textTimerController:通过文本显示计时信息并控制其计时器状态的组件参数。
-
TextTimerOptions对象是用于配置TextTimer组件的关键参数集合,它包含以下三个主要属性,以确保计时器的灵活性和实用性:
-
isCountDown:这是一个布尔类型参数,用于指示计时器是否应设置为倒计时模式。当isCountDown设置为true时,计时器将进入倒计时状态。
-
count:这个参数代表倒计时的初始时间,其单位为毫秒。它的有效范围是从1毫秒到86400000毫秒(即24小时)。isCountDown为true时,count参数才会生效。如果你设置的时间在0到86400000毫秒之间,计时器将以此值为倒计时起点。若超出这个范围,计时器将自动采用默认值作为倒计时初始值。
- 默认值:若未指定count值或指定值无效,计时器将默认使用60000毫秒(即1分钟)作为倒计时的初始时间。
-
Controller:这是TextTimer的控制器参数,通常称为TextTimer控制器。它负责管理计时器的行为,包括启动、暂停、重置等操作,确保用户能够精准地控制计时过程。
自定义组件UI——文本按钮
@Component
struct TextButton {
text: string = '文本按钮'
build() {
Row() {
Text(this.text)
.margin(5)
}
.borderWidth(1)
.width(80)
.borderRadius(100)
.justifyContent(FlexAlign.Center)
.alignItems(VerticalAlign.Center)
}
}
这是一个自定义组件,通过封装UI实现我想要的墨水线条的按钮元素
主UI
build() {
Column() {
Text(this.countMode ? this.countUp : this.countDown)
.fontColor(Color.Blue)
.fontColor(28)
.onClick(() => {
this.countMode = !this.countMode
this.countDownDate.setHours(1)
if (this.countMode) {
this.textTimerController.reset()
}
})
.borderWidth({ bottom: 1 })
Row() {
if (this.countMode) {
TextTimer({
controller: this.textTimerController,
})
.fontSize(120)
.format('HH:mm:ss')
} else {
TextTimer({
controller: this.textTimerController,
count: 60000,
isCountDown: true
})
.fontSize(120)
.format('HH:mm:ss')
}
}
.borderWidth(1)
.borderRadius(30)
Row() {
TextButton({ text: '启动' })
.onClick(() => {
this.textTimerController.start()
})
TextButton({ text: '暂停' })
.onClick(() => {
this.textTimerController.pause()
})
TextButton({ text: '重置' })
.onClick(() => {
this.textTimerController.reset()
})
}
.width('50%')
.justifyContent(FlexAlign.SpaceEvenly)
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.SpaceEvenly)
}
- this.textTimerController.start():开始计时;
- this.textTimerController.pause():暂停计时;
- this.textTimerController.reset():重置计时;
后续分享
接下来,我计划分享的内容将围绕自定义组件的能力,包括倒计时钟和正计时钟的UI设计,以及番茄钟的实用技巧。以下是即
将分享的主要内容:
- 正计时钟的UI交互设计思路:我将分享如何展示长时间运行的正计时数据,以及如何利用视觉元素,让时间的流动更加直观。
- 倒计时钟的自定义UI交互设计:我将详细介绍如何通过调整UI元素,如字体、颜色和布局,来提升用户的交互体验。
- 番茄钟的使用指南:作为一种提升工作效率的工具,番茄钟的魅力不容小觑。我将结合自定义组件,展示番茄钟的具体应用方法。
我非常期待大家对这个计时器应用的反馈和建议。无论是功能上的改进,还是UI设计上的创新,都欢迎各位积极提出。让我们一起探讨,如何将这个计时器打磨成一个更加实用、高效的工具。