鸿蒙应用框架开发【简单时钟】 UI框架
简单时钟
介绍
本示例通过使用@ohos.display接口以及Canvas组件来实现一个简单的时钟应用。
效果预览

使用说明
1.界面通过setInterval实现周期性实时刷新时间,使用Canvas绘制时钟,指针旋转角度通过计算得出。
例如:"2 * Math.PI / 60 * second"是秒针旋转的角度。
具体实现
- 本示例展示简单时钟的方法主要封装在Index中,源码参考:[Index.ets] 。
/** Copyright (c) 2022 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
import { display } from '@kit.ArkUI';
import Logger from '../utils/Logger';
import DrawClock from '../utils/DrawClock';
import CommonConstants from '../common/CommonConstants';const HEIGHT_ADD: number = CommonConstants.HEIGHT_ADD; // 表盘下面需要绘制时间,canvas高度是宽度加150
const TAG: string = 'Index';@Entry
@Component
struct Clock {@State canvasWidth: number = CommonConstants.DEFAULT_WATCH_SIZE; // 300是表盘默认大小private settings: RenderingContextSettings = new RenderingContextSettings(true);private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);private radius: number = CommonConstants.DEFAULT_WATCH_RADIUS; // 默认表盘半径private intervalId: number = 0;private drawClock: DrawClock = new DrawClock();updateTime = () => {this.context.clearRect(0, 0, this.canvasWidth, this.canvasWidth + HEIGHT_ADD);let nowTime = new Date();let hour = nowTime.getHours();let minute = nowTime.getMinutes();let second = nowTime.getSeconds();let time = `${this.fillTime(hour)}:${this.fillTime(minute)}:${this.fillTime(second)}`;this.drawClock.drawClock(this.context, this.radius, this.canvasWidth, hour, minute, second, time)this.context.translate(-this.radius, -this.radius);}fillTime(time: number) {return time < CommonConstants.NUMBER_TEN ? `0${time}` : `${time}`;}onPageShow(): void {this.updateTime();this.intervalId = setInterval(this.updateTime, CommonConstants.INTERVAL_TIME)}onPageHide() {clearInterval(this.intervalId);}aboutToAppear() {this.getSize();}// 获取设备宽高计算表盘大小async getSize() {let mDisplay = display.getDefaultDisplaySync();Logger.info(TAG, `getDefaultDisplay mDisplay = ${JSON.stringify(mDisplay)}`);this.canvasWidth = px2vp(mDisplay.width > mDisplay.height ? mDisplay.height * CommonConstants.CONVERSION_RATE :mDisplay.width * CommonConstants.CONVERSION_RATE);this.radius = this.canvasWidth / CommonConstants.NUMBER_TWO;}build() {Stack({ alignContent: Alignment.Center }) {Canvas(this.context).padding({ top: $r('app.float.canvas_padding_top') }).width(this.canvasWidth).height(this.canvasWidth + HEIGHT_ADD).onReady(() => {this.updateTime();this.intervalId = setInterval(this.updateTime, CommonConstants.INTERVAL_TIME);})}.width(CommonConstants.FULL_PERCENTAGE).height(CommonConstants.FULL_PERCENTAGE)}
}
- 设置表盘大小:通过Index中的display.getDefaultDisplay()方法来获取设备宽高计算表盘大小;
- 获取当前时间:调用updateTime函数,执行new Date().getHours()、new Date().getMinutes()、new Date().getSeconds()获取当前时间。
- 绘制表盘内容:通过CanvasRenderingContext2D来画表盘背景、时针、分针、秒针、圆心以及表盘下方文本;
- 启动时钟:添加setInterval定时器,每隔1s执行一次updateTime函数。
以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下:
内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!
鸿蒙【北向应用开发+南向系统层开发】文档
鸿蒙【基础+实战项目】视频
鸿蒙面经

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!
相关文章:
鸿蒙应用框架开发【简单时钟】 UI框架
简单时钟 介绍 本示例通过使用ohos.display接口以及Canvas组件来实现一个简单的时钟应用。 效果预览 使用说明 1.界面通过setInterval实现周期性实时刷新时间,使用Canvas绘制时钟,指针旋转角度通过计算得出。 例如:"2 * Math.PI / …...
MySQL是如何实现数据排序的
MySQL是如何实现数据排序的 MySQL实现数据排序主要依赖于其内部的排序和索引机制。当执行包含ORDER BY子句的SQL查询时,MySQL会采用以下一种或多种策略来对数据进行排序 索引排序 如果ORDER BY子句中的列是表的一个索引(或索引的一部分)&a…...
【测试架构师修炼之道】读书笔记
六大质量属性 效率性能 测试类型:六种-XX属性转化为XX测试 产品测试车轮图 一个软件测试者要从哪些方面(测试类型)用哪些方法(测试方法)去测试产品(质量属性)的关系图 全面性与深度 稳定性测试:多并复异 性能测试: 系统能够正确处理新业…...
C++ Functor仿函数
Functor 对象模拟函数 把类对象,像函数名一样使用。 仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现 一个 operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 operator() 语法格式 clas…...
【EI会议征稿通知】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)
重要信息 会议官网:www.icbase.org(查看详情) 中文主页:【往届会后3个月检索】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)_艾思科蓝_学术一站式服务平台 会议时间:2024年9月2…...
微信小程序多端框架实现app内自动升级
多端框架生成的app,如果实现app内自动升级? 一、Android 实现app自动升级,华为应用市场 1、获取 应用市场地址 下载地址 2、在微信开放平台进行配置 应用下载地址:应用市场点击分享,里面有一个复制连接功能 应用市…...
C# Log4Net应用
1 需求分析 日志记录是程序开发中必不可少的环节,对于bug调试和后期项目维护都十分重要.其中Log4net是C#环境下广泛使用的日志记录库,功能十分强大.本教程提供的日志记录需求如下 1,日志文件统一保存到项目启动目录下的logs文件夹 2,以天为单位进行日志…...
pytest8.x版本 中文使用文档-------32.示例:使用自定义目录收集器
默认情况下,pytest 使用pytest.Package来收集包含 __init__.py 文件的目录,使用 pytest.Dir来收集其他目录。如果你想要自定义目录的收集方式,你可以编写自己的pytest.Directory 收集器,并使用 pytest_collect_directory钩子来连接…...
c语言第七天笔记
作业题: 设计TVM(地铁自动售票机)机软件。 输入站数,计算费用,计费规则,6站2元,7-10站3元,11站以上为4元。 输入钱数,计算找零(找零时优先找回面额大的钞票)࿰…...
软件测试经理工作日常随记【8】-UI自动化_加密接口的传输
软件测试经理工作日常随记【8】-UI自动化_加密接口的传输 工具类 #utils_api.py class RequestUtils:classmethoddef send_request_splicing(cls, dicts, url): # 对应请求的入参及请求的函数Logger.logger_in().info(-----------------{}接口开始执行-----------------.for…...
基于FPGA的出租车计费系统设计---第一版--郝旭帅电子设计团队
欢迎各位朋友关注“郝旭帅电子设计团队”,本篇为各位朋友介绍基于FPGA的出租车计费系统设计—第一版 功能说明: 收费标准(里程):起步价5元,包括三公里;三公里之后,每公里2元&#x…...
商汤联合建工社共同打造“住建领域法规标准知识大模型”
近日,商汤科技与中国建筑出版传媒有限公司(下称“建工社”)共同发布“住建领域法规标准知识大模型”,共同探索新型知识服务模式。大模型聚焦建筑行业,以商汤“日日新SenseNova 5.5”大模型体系为基础,结合海…...
基于STM32的智能交通监控系统教程
目录 引言环境准备智能交通监控系统基础代码实现:实现智能交通监控系统 车辆检测模块交通流量分析模块通信与网络系统实现用户界面与数据可视化应用场景:交通管理与优化常见问题与解决方案收尾与总结 引言 随着城市化进程的加快,交通拥堵问…...
Git和TortoiseGit的安装与使用
文章目录 前言一、Git安装步骤查看版本信息 二、TortoiseGit安装中文语言包TortoiseGit 配置不同语言 Git基本原理介绍及常用指令 GitLab添加TortoiseGIT生成SSH Key 前言 Git 提供了一种有效的方式来管理项目的版本,协作开发,以及跟踪和应用文件的变化…...
改进YOLOv5:加入非对称卷积块ACNet,加强CNN 的内核骨架,包含VOC对比实验
🔥🔥🔥 提升多尺度、不规则目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: �…...
论文解读(12)-Transfer Learning
这个也是看论文的时候看到的,但是对这方面不是理解,需要对这方面知识点进行一个补充。 参考: 迁移学习概述(Transfer Learning)-CSDN博客 1. 什么是Transfer Learning? Transfer Learning就是迁移学习&…...
力扣高频SQL 50题(基础版)第三十八题
文章目录 力扣高频SQL 50题(基础版)第三十八题1484.按日期分组销售产品题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第三十八题 1484.按日期分组销售产品 题目说明 表 Activities: ---…...
大模型下的视频理解video understanding
数据集 Learning Video Context as Interleaved Multimodal Sequences Motivation: 针对Narrative videos, like movie clips, TV series, etc.:因为比较复杂 most top-performing video perception models 都是研究那种原子动作or人or物 understandin…...
【网络安全】CR/LF注入+Race Condition绕过MFA
未经许可,不得转载。 文章目录 漏洞1:CR/LF注入前言正文漏洞2:Race Condition绕过MFA前言正文漏洞1:CR/LF注入 前言 ExaHub(此处为虚拟名称)是一个专为 Exa 编程语言的爱好者和专业人士量身定制的平台。Exa 语言以其出色的速度和性能而闻名,广泛应用于科学计算、机器学…...
深度学习入门——卷积神经网络
本章的主题是卷积神经网络(Convolutional Neural Network,CNN)。CNN被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以CNN为基础。本章将详细介绍CNN的结构,并用Python实…...
FPGA仿真库配置避坑指南:Xilinx 7系、Altera Cyclone V、Lattice ECP5在ModelSim 10.6d下的完整流程
FPGA仿真库配置避坑指南:Xilinx 7系、Altera Cyclone V、Lattice ECP5在ModelSim 10.6d下的完整流程 第一次在ModelSim 10.6d环境下配置FPGA仿真库时,我花了整整三天时间排查各种路径错误和权限问题。直到现在,我还清楚地记得那个深夜——当仿…...
QQ音乐加密文件解密终极指南:qmcdump实战深度解析
QQ音乐加密文件解密终极指南:qmcdump实战深度解析 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否遇到…...
抖音图片怎么去水印?2026实测免费去水印方法全盘点,这几款工具真好用
抖音图片怎么去水印?2026实测免费去水印方法全盘点,这几款工具真好用 刷抖音的时候,你有没有遇到过这种情况:看到一张超好看的图片,点保存,结果发现角落里多了一行「用户名」或者一个抖音 Logo,…...
从“能用”到“愿用”:Lovable Serverless平台的6大心理学设计法则(基于87家头部企业DevOps调研数据)
更多请点击: https://intelliparadigm.com 第一章:从“能用”到“愿用”:Lovable Serverless平台的认知跃迁 Serverless 并非仅关于函数执行与自动扩缩——真正的分水岭在于开发者是否**主动选择、持续信任并乐于传播**该平台。当运维负担归…...
如何永久保存微信聊天记录:5分钟学会WeChatMsg免费完整指南
如何永久保存微信聊天记录:5分钟学会WeChatMsg免费完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...
京东自动评价终极指南:如何用Python脚本轻松完成批量评价
京东自动评价终极指南:如何用Python脚本轻松完成批量评价 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 还在为京东购物后的繁琐评价工作烦恼吗?每次大促后面对几十个…...
爆单实操课:从3C到美妆,跨境商家如何用AI神器搞定TikTok本土化
每天都有无数跨境卖家在各大社群里发问:怎么用ai生成带货视频,有哪些工具比较好用? 在 TikTok 这个极度依赖内容爆发的平台上,不同类目的产品对视频素材的需求千差万别。靠人工剪辑不仅效率低,且极难跨越本土化语言的障…...
红米AX3000路由器SSH完整解锁终极指南:3步获取root权限
红米AX3000路由器SSH完整解锁终极指南:3步获取root权限 【免费下载链接】unlock-redmi-ax3000 Scripts for getting Redmi AX3000 (aka. AX6) SSH access. 项目地址: https://gitcode.com/gh_mirrors/un/unlock-redmi-ax3000 想要完全掌控你的红米AX3000路由…...
3分钟掌握Windows安装APK:告别复杂模拟器的终极方案
3分钟掌握Windows安装APK:告别复杂模拟器的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到过这样的场景?同事发来一个实…...
神经进化算法实战:从零构建AI Flappy Bird游戏智能体
1. 项目概述:当AI学会玩像素小鸟如果你玩过那个让人又爱又恨的《Flappy Bird》,一定对那只在绿色水管间反复横跳的小鸟记忆犹新。但你想过吗,如果让一群“数字小鸟”自己学会玩这个游戏,会是什么景象?这正是“AI Flapp…...
