简约之美:开发计时器应用,探索计时器的巧妙运用(1) 原创

醉丶斛觞
发布于 2024-11-7 18:21
浏览
0收藏

今天,我投入了精力开发了一个计时器应用,它会陆续具备了正计时和倒计时两种实用的功能。在这次开发过程中,我深刻感受到了技术的简约之美,简单的设计同样能够发挥巨大的作用。

计时钟效果

简约之美:开发计时器应用,探索计时器的巧妙运用(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设计,以及番茄钟的实用技巧。以下是即
将分享的主要内容:

  1. 正计时钟的UI交互设计思路:我将分享如何展示长时间运行的正计时数据,以及如何利用视觉元素,让时间的流动更加直观。
  2. 倒计时钟的自定义UI交互设计:我将详细介绍如何通过调整UI元素,如字体、颜色和布局,来提升用户的交互体验。
  3. 番茄钟的使用指南:作为一种提升工作效率的工具,番茄钟的魅力不容小觑。我将结合自定义组件,展示番茄钟的具体应用方法。
    我非常期待大家对这个计时器应用的反馈和建议。无论是功能上的改进,还是UI设计上的创新,都欢迎各位积极提出。让我们一起探讨,如何将这个计时器打磨成一个更加实用、高效的工具。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
收藏
回复
举报
回复
    相关推荐