鸿蒙应用框架开发【简单时钟】 UI框架

简单时钟

介绍

本示例通过使用@ohos.display接口以及Canvas组件来实现一个简单的时钟应用。

效果预览

1

使用说明

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函数。

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频剪辑常用工具

视频剪辑 1. Adobe Premiere Pro (PR)2. Final Cut Pro X (FCPX)3. DaVinci Resolve4. 剪映5. FFmpeg一、安装FFmpeg二、基本剪辑操作1. 裁剪视频2. 合并视频3. 转换视频格式 三、高级剪辑操作1. 添加水印2. 提取音频 四、总结 视频剪辑常用软件及其信息 1. Adobe Premiere Pr…

Postman 工具网站测试工具 (用于发送请求测试处理业务逻辑)

今天在写go web开发的时候&#xff0c;学会了用postman 这个工具很方便的发送了一个post请求&#xff0c;其中body包含 JSON 格式的 web 服务收到请求回复 success 及打印

“微软蓝屏”“隐形炸弹”

“微软蓝屏”事件暴露了网络安全哪些问题&#xff1f; 近日&#xff0c;一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;不仅成为科技领域的热点新闻&#xff0c;更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件&#xff0c;源于美国电脑安全技…

Linux操作系统内核升级及回退全过程

文章目录 **内核版本升级**1. **查看当前机器操作系统IP&#xff0c;操作系统版本和内核版本**2. **沟通至业务侧确认业务ip&#xff0c;确认应用下线&#xff0c;业务侧回复后开始操作**3. **建立本地yum源&#xff0c;挂载高版本内核镜像**4. **移除原有yum源&#xff0c;新建…

手写 Hibernate ORM 框架 00-环境准备

手写框架 类似的还有其他系列&#xff0c;主要用于学习其中的原理。 Hibernate 属于比较早的框架了&#xff0c;后期将实现一套 mybatis。 手写 Hibernate 系列 手写 Hibernate ORM 框架 00-hibernate 简介 手写 Hibernate ORM 框架 00-环境准备 手写 Hibernate ORM 框架…

Lc62---3024.三角形类型(排序)--java版

1.题目 2.思路 就是用选择结构进行if-else if的编写。 除了题目的条件&#xff0c;还要判断是不是三角形&#xff08;两边之和小于等于第三边&#xff0c;也无法构成三角形&#xff09; 3.代码实现 class Solution {public String triangleType(int[] nums) {if(nums.length…

命令行使用ADB,不用root,完美卸载小米预装软件

ADB安装与运行 install java 下载安装 注意选择JDK17以上版本 https://www.oracle.com/java/technologies/downloads/#jdk22-windows 选择中间的安装文件下载 编辑系统变量 C:\Program Files (x86)\Java\jdk-22 C:\Program Files (x86)\Java\jdk-22\bin 把C:\Progra…

nginx 启动 ssl 模块

文章目录 前言nginx 启动 ssl 模块1. 下载2. 启动 ssl 模块 步骤3. 验证前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! nginx 启动 ssl 模块 1. 下载 下载…

Scrapy 爬取旅游景点相关数据(五)

本期内容&#xff1a;&#xff08;1&#xff09;爬取日本其他城市数据存入数据库&#xff08;2&#xff09;爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的&#xff0c;因为数据样本量少嘛&#xff0c;本期来爬取其他城市的景…

1.Redis介绍

redis是一个键值型数据库。 是一种nosql数据库&#xff0c;非关系型数据库。 sql数据库 1.字段类型是固定的。 2.表的结构是固定的。表数据量特别大的时候&#xff0c;去修改表结构会出现问题。也会导致业务逻辑的修改。 3.每个字段有一定的约束&#xff0c;比如唯一约束&…

【LeetCode】二叉树的锯齿形层序遍历

目录 一、题目二、解法完整代码 一、题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a; 输…

[Python] (中上难度) 五道高质量例题+详解 算法 奇数个数 求值 猴子分桃 淘汰游戏

1.奇数个数 题目&#xff1a; 计算0—7所能组成的 解析&#xff1a; 代码一&#xff1a; 假设范围为1-8位数的数字&#xff0c;假设sums4是因为个位时只有1&#xff0c;3&#xff0c;5&#xff0c;7四个奇数&#xff0c;循环从两位数开始遍历&#xff1a; 当 j < 2 时…

tof系统标定流程之lens标定

1、lens标定详解 为什么在标定tof时需要进行lens的标定,可以说lens标定是一个必不可少的步骤,tof模组也是有镜头的,镜头的畸变会导致进入的光线出现偏差,最终照射到tof芯片表面导致深度图的分布出现畸变,通常是枕形畸变。例外一个用途在于,在计算fppn误差环节需要知道镜头…

选股回测思路

数据处理 对日线数据进行数据清理 原来的日线数据包括交易日期、股票代码、股票名称、开盘价、收盘价、最高价、最低价首先计算涨跌幅&#xff0c;涨跌幅 &#xff08;收盘价 - 前一天收盘价&#xff09; / 收盘价然后计算当日涨跌幅&#xff0c;当日涨跌幅 &#xff08;收盘…

导游职业资格考试真题题库

导游职业资格考试真题题库 31.我国目前试点运行的10个TIR口岸中&#xff0c;有6个位于&#xff08;&#xff09;。 A.甘肃 B.新疆 C.宁夏 D.黑龙江 答案&#xff1a;B 解析&#xff1a;我国目前试点运行的10个TIR口岸中&#xff0c;有6个位于新疆。 32.下列新疆节日中&…

LangGPT结构化提示词编写实践

当然&#xff0c;我们可以从几个方面来讲解如何编写LangGPT的结构化提示词&#xff1a; 1. **明确目标**&#xff1a; - **目的**&#xff1a;确定提示词的最终目标&#xff0c;比如生成文本、回答问题、撰写报告等。 - **任务描述**&#xff1a;清晰描述任务&#xf…

随机森林(Random Forest)预测模型及其特征分析(Python和MATLAB实现)

## 一、背景 在大数据和机器学习的快速发展时代&#xff0c;数据的处理和分析变得尤为重要。随着多个领域积累了海量数据&#xff0c;传统的统计分析方法常常无法满足复杂问题的需求。在这种背景下&#xff0c;机器学习方法开始广泛应用。随机森林&#xff08;Random Forest&am…

在 Kali Linux 虚拟机中实现主机代理共享的详细指南

Kali Linux 是网络安全和渗透测试领域中广泛使用的操作系统。它提供了丰富的工具和灵活的环境&#xff0c;适合各种网络安全任务。在某些情况下&#xff0c;您可能需要通过主机的代理服务器来实现特定的网络配置&#xff0c;以便更好地保护隐私或进行网络测试。这篇文章将详细介…

langchain 入门指南 - 实现一个多模态 chatbot

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 在前面的文章中&#xff0c;我们学会了如何通过 langchain 实现本地文档库的 QA&#xff0c;又或者通过 langchain 来实现对话式的问答系…