鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】

2024-05-07 21:44

本文主要是介绍鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

本文将介绍如何快速搭建基于OpenHarmony标准系统(Hi3516DV300开发板)的应用开发环境,并基于一个时钟APP示例逐步展示应用的创建、开发、调试和安装等流程。示例代码可以通过本链接获取。

时钟App是一款显示实时时间的应用,显示效果如下图所示:

图 1 时钟应用显示效果图

title=

开发准备

首先需要下载和配置DevEco Studio,具体操作请参考DevEco Studio 使用指南。

开发步骤

应用的功能是通过表盘和数字显示实时时间。

从显示效果图分析可知,页面由两个部分组成:

  • 表盘栏:主要展示一个动态的钟表,且钟表指针能准确转动。
  • 数字时间栏:主要以数字形式显示当前时间。
  • 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

综上,我们可搭建一个纵向两行排列的弹性页面布局来实现界面的功能。具体开发步骤如下:

  1. 在hml文件中添加一个根节点div,注意每个hml文件中有且只能有一个根节点,代码如下:

    <div class="container">
    </div>

    class="container"表示组件使用的样式,container是index.css文件中的一个样式类,代码如下:

    .container {     flex-direction: column;justify-content: center;align-items: center;width: 100%;height: 100%;
    }

    在这个样式类中,我们分别设置了根组件div的高度和宽度(注意在应用的开发过程中,除部分组件(text)外必须显式指定组件的高度和宽度,否则可能无法显示)、并将flex-direction属性设置为column,该属性表示div的子组件是垂直方向从上到下排列;这样就可以实现本节开头所说的纵向两行排列的弹性页面布局。

  2. 实现时钟转动,需要使用“stack”组件。“stack”组件的功能是堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。

    在根组件下添加一个stack容器,代码片段如下:

    <div class="container">    <stack class="stack"><image src="/common/clock_bg.png" class="clock-bg"></image> <!--设置表盘图片--><image src="/common/hour_hand.png" class="clock-hand"style="transform : rotate({{ hour * 30 + minute / 2 }}deg);"></image> <!--设置时钟图片,(hour * 30)一小时旋转30度,(minute / 2)时钟每分钟旋转的角度--><image src="/common/minute_hand.png" class="clock-hand"style="transform : rotate({{ minute * 6 + second / 10 }}deg);"></image> <!--设置分钟图片,(minute * 6)一分钟旋转6度,(second / 10)分钟每秒钟旋转的角度--><image src="/common/second_hand.png" class="clock-hand"style="transform : rotate({{ second * 6 }}deg);"></image> <!--设置秒钟图片,(second * 6)一秒旋转6度--></stack>
    </div>

    style="transform : rotate({{ second * 6 }}deg) 这类代码用来设置组件的旋转事件。其中transform是设置动画平移/旋转/缩放的属性,rotate是旋转动画属性,支持设置x轴和y轴两个维度的选中参数。

    在css文件中设置"stack"组件样式的高度、宽度、位置等属性,代码如下:

    .stack {flex-direction: column;justify-content: center;align-items: center;width: 100%;height: 50%;
    }

    在css文件中设置"clock-bg"组件样式的高度、宽度等属性,代码如下:

    .clock-bg {width: 80%;height: 80%;object-fit: scale-down;
    }

    在css文件中设置"clock-hand"组件为时针、分针和秒针的高度、宽度等属性,代码如下:

    .clock-hand {width: 25%;height: 65%;object-fit: contain;
    }

    index.js中会有一个定时器实时刷新时分秒变量,从而触发时间界面自动更新。对应的js代码如下:

    export default {timer: undefined,//定义参数data: {hour: 0,   //定义小时minute: 0, //定义分钟second: 0  //定义秒},onInit () {this.updateTime();this.timer = setInterval(this.updateTime, 1000)//设置1s的定时器},  updateTime: function () {       var nowTime = new Date()    this.hour = nowTime.getHours()    this.minute = nowTime.getMinutes()   this.second = nowTime.getSeconds()    if (this.hour < 10) {        this.hour = '0' + this.hour    }  if (this.minute < 10) {       this.minute = '0' + this.minute   }    if (this.second < 10) {      this.second = '0' + this.second   }},
    }

  3. 显示数字时间,在钟表下面以数字形式显示当前时间。在根布局内末尾加上text组件,页面结构如下:

    <text class="digit-clock"> {{ hour }}:{{ minute }}:{{ second }}</text>

    class="digit-clock"设置了组件的高度和宽度以及字体大小,其代码如下:

    .digit-clock {    font-size: 58px;   width: 100%;margin-top: 0px;text-align: center;
    }

  4. 所有组件设置样式、动画效果和数据动态绑定,完整代码如下所示:

    • index.hml文件

      <div class="container"><stack class="stack"><image src="/common/clock_bg.png" class="clock-bg"></image><image src="/common/hour_hand.png" class="clock-hand"style="transform : rotate({{ hour * 30 + minute / 2 }}deg);"></image><image src="/common/minute_hand.png" class="clock-hand"style="transform : rotate({{ minute * 6 + second / 10 }}deg);"></image><image src="/common/second_hand.png" class="clock-hand"style="transform : rotate({{ second * 6 }}deg);"></image></stack><text class="digit-clock">{{ hour }}:{{ minute }}:{{ second }}</text>
      </div>

    • index.css文件

      .container {flex-direction: column;justify-content: center;align-items: center;width: 100%;height: 100%;
      }.stack {flex-direction: column;justify-content: center;align-items: center;width: 100%;height: 50%;
      }.digit-clock {font-size: 58px;width: 100%;margin-top: 0px;text-align: center;
      }.clock-bg {width: 80%;height: 80%;object-fit: scale-down;
      }.clock-hand {width: 25%;height: 65%;object-fit: contain;
      }

    • index.js:

      js文件主要用于实现App应用的逻辑交互。在本页面js文件中,需要实现如下功能:定时获取系统时间。

      export default {timer: undefined,data: {hour: 0,minute: 0,second: 0},onInit() {this.updateTime()this.timer = setInterval(this.updateTime, 1000)},updateTime: function () {var nowTime = new Date()this.hour = nowTime.getHours()this.minute = nowTime.getMinutes()this.second = nowTime.getSeconds()if (this.hour < 10) {this.hour = '0' + this.hour}if (this.minute < 10) {this.minute = '0' + this.minute}if (this.second < 10) {this.second = '0' + this.second}},onDestroy() {clearInterval(this.timer);}
      }

签名打包

代码编写完成后,在真机设备上运行应用,需要先对应用进行签名,然后再进行打包,具体操作请参考签名打包指导。

真机运行

应用签名打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置],然后将OpenHarmony系统烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[标准系统Hi3516快速入门]。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载应用。

  1. 从开发者工具代码仓路径中获取hdc客户端。

    developtools/hdc_standard/prebuilt/windows/hdc_std.exe

    修改名称为hdc.exe,并将工具路径加入系统环境path变量中。

  2. 启动cmd命令窗口,执行以下命令,推送hap应用包到设备目录下并安装。

    hdc install clock.hap

  3. 启动应用。执行以下命令,其中ohos.samples.clock为应用包名,MainAbility为应用启动的Ability。

    hdc shell aa start -d 123 -a ohos.samples.clock.MainAbility -b ohos.samples.clock

  4. 卸载应用(可选)。执行以下命令,其中ohos.samples.clock为应用包名。

    hdc shell bm uninstall -n ohos.samples.clock

常见问题

搜狗高速浏览器截图20240326151547.png

hdc_std连接不到设备

  • 现象描述

    执行 "hdc_std list targets"命令后结果为:[Empty]

  • 可能原因和解决方法

    1. 设备没有被识别:

      在设备管理器中查看是否有hdc设备,在通用串行总线设备中会有“HDC Device”信息。如果没有,hdc无法连接。此时需要插拔设备,或者烧写最新的镜像。

    2. hdc_std工作异常:

      可以执行"hdc kill"或者"hdc start -r"杀掉hdc服务或者重启hdc服务,然后再执行hdc list targets查看是否已经可以获取设备信息。

    3. hdc_std与设备不匹配:

      如果设备烧写的是最新镜像,hdc_std也需要使用最新版本。由于hdc_std会持续更新,请从开源仓developtools_hdc_standard中获取,具体位置在该开源仓的prebuilt目录。

hdc_std运行不了

  • 现象描述

    点击hdc_std.exe文件无法运行。

  • 可能原因和解决方法

    hdc_std.exe不需要安装,直接放到磁盘上就能使用,也可以添加到环境变量中。通过打开cmd执行hdc_std命令直接使用。

鸿蒙Next核心技术分享

1、鸿蒙基础知识←《鸿蒙NEXT星河版开发学习文档》

2、鸿蒙ArkUI←《鸿蒙NEXT星河版开发学习文档》

3、鸿蒙进阶技术←《鸿蒙NEXT星河版开发学习文档》

 4、鸿蒙就业高级技能←《鸿蒙NEXT星河版开发学习文档》 

 5、鸿蒙多媒体技术←《鸿蒙NEXT星河版开发学习文档》 

6、鸿蒙南向驱动开发←《鸿蒙NEXT星河版开发学习文档》  

7、鸿蒙南向内核设备开发←《鸿蒙NEXT星河版开发学习文档》  

 8、鸿蒙系统裁剪与移植←《鸿蒙NEXT星河版开发学习文档》  

这篇关于鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968476

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹