当前位置:网站首页>#夏日挑战赛# HarmonyOS canvas实现时钟
#夏日挑战赛# HarmonyOS canvas实现时钟
2022-07-01 15:41:00 【51CTO】
作者:郑瑶
前言
最近在学习HarmonyOS 相关的东西,看了很多网上的canvas 实现时钟,现在我也来写一个关于HarmonyOS 的时钟吧。
项目说明
工具版本:DevEco Studio 3.0 Beta3
SDK版本;3.1.5.5
主要用到知识:canvas js
效果展示

实现步骤
1. 在页面index.hml 中定义一个canvas 元素
2. 需要在index.js data 中定义两个变量用来存放目标元素和绘制2d
3. 需要在onShow 生命周期中拿到目标元素并且绘制 2d
4. 定义一个初始化函数initData(),调用绘制函数
5. 绘制函数clock函数
5.1 首先绘制外部最大的圆
此时的页面长这样:

5.2 绘制时间(时)刻度(12小时刻度)
此时页面:

5.3 绘制中心的小圆点
此时的页面长这样:

5.4 获取时间并且转化成北京时间
此时需要获取当前系统的本地时间,在此处遇到了一个小麻烦,鸿蒙开发者工具new Date() 获取到的时间为格林威治时间,而我们现在采用的是北京时间,需要写函数来转化时间,转化函数为getTimeStamp()
获取当前北京时间:
5.5 绘制时钟的指针
此时的页面长这样:

5.6 绘制分针的指针
此时页面长这样:

5.7 绘制秒针
此时页面长这样:

5.8 最后一步我们需要写一个更新函数用来调用所有绘画函数并且在更新函数中获取对应的北京时间:
6. 最后一步我们需要让这个钟表转动起来
那么就需要在initData 函数中写一个定时器没一秒钟执行一次绘制函数即可: 最后的图片如上图第一张图所示的效果
总结:
以上就是canvas 绘制一个时钟的全部步骤了。 最重要的一点是要能正确的获取到时间(北京时间)但是我发现在编辑器上new Date() 到的时间跟咋们的北京时间相差了八小时,在一位同事的提醒下才知道这个获取的时间为格林威治时间,那么我们需要将这个格林威治时间转化成北京时间,在网上找了一段转化方法终于转化成功。
更多原创内容请关注: 中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
边栏推荐
- 药品溯源夯实安全大堤
- 华为发布HCSP-Solution-5G Security人才认证,助力5G安全人才生态建设
- What are the test items of juicer ul982
- Intelligent operation and maintenance practice: banking business process and single transaction tracking
- Logical analysis of automatic decision of SAP CRM organization model
- [one day learning awk] conditions and cycles
- 七夕表白攻略:教你用自己的专业说情话,成功率100%,我只能帮你们到这里了啊~(程序员系列)
- Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results
- Pico,能否拯救消费级VR?
- 【目标跟踪】|STARK
猜你喜欢

她就是那个「别人家的HR」|ONES 人物

Implementation of wechat web page subscription message

Hardware design guide for s32k1xx microcontroller

张驰咨询:锂电池导入六西格玛咨询降低电池容量衰减

软件测试的可持续发展,必须要学会敲代码?

MySQL service is starting. MySQL service cannot be started. Solution

三星率先投产3nm芯片,上海应届硕士生可直接落户,南开成立芯片科学中心,今日更多大新闻在此...

Zhang Chi Consulting: household appliance enterprises use Six Sigma projects to reduce customers' unreasonable return cases

张驰咨询:家电企业用六西格玛项目减少客户非合理退货案例

Short Wei Lai grizzly, to "touch China" in the concept of stocks for a living?
随机推荐
【云动向】6月上云新风向!云商店热榜揭晓
k8s部署redis哨兵的实现
Summary of week 22-06-26
远程办公经验?来一场自问自答的介绍吧~ | 社区征文
RT-Thread Env 工具介绍(学习笔记)
你TM到底几点下班?!!!
[Cloudera][ImpalaJDBCDriver](500164)Error initialized or created transport for authentication
并发编程系列之什么是ForkJoin框架?
Tableapi & SQL and MySQL insert data of Flink
【STM32-USB-MSC问题求助】STM32F411CEU6 (WeAct)+w25q64+USB-MSC Flash用SPI2 读出容量只有520KB
Introduction to MySQL audit plug-in
SAP CRM organization Model(组织架构模型)自动决定的逻辑分析
Tableapi & SQL and Kafka message acquisition of Flink example
说明 | 华为云云商店「商品推荐榜」
Create employee data in SAP s/4hana by importing CSV
《QT+PCL第九章》点云重建系列2
ThinkPHP advanced
The last picture is seamlessly connected with the first picture in the swiper rotation picture
GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速
Redis seckill demo