鸿蒙开发中库的调用

codelabs 上有不少学习的案例,这次学习的是库的调用(arkts)案例。学习笔记拆成两部分,本文是关于社区库调用的学习笔记,以下我的学习心得,小白们也可以跟着一步步实现吖。
本次学习的案例由主页面、本地库组件页面、社区库组件页面三个页面组成,主页面由 navigation 作为根组件实现全局标题,由 tabs 组件实现本地库和社区库页面的切换。
效果如下:
软件要求:
deveco studio 版本:deveco studio 3.1 beta1 及以上版本
harmonyos sdk 版本:api version 9 及以上版本
概念知识
tabs:一种可以通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。
canvas:画布组件,用于自定义绘制图形。
以上这两个组件在以往的文章也有提及过啦,于此着重学习两个新的知识点:
navigation:一般作为 page 页面的根容器,通过属性设置来展示页面的标题、工具栏、菜单。
https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-basic-components-navigation-0000001333800549?ha_linker=eyj0cyi6mty3odm2nzayodq1oswiawqioii4zdbkztmzzju1mzy0ndrlyjzkytq5mjm1mzcwmjezzij9harmonyos npm 包:在传统的 npm 三方包的基础上,定义了 harmonyos npm 共享包特定的工程结构和配置文件,支持 harmonyos 页面组件、相关 api、资源的调用。https://developer.harmonyos.com/cn/docs/documentation/doc-guides/creating_har_api8-0000001341502357?ha_linker=eyj0cyi6mty3odm2nza4otk3nswiawqioii4zdbkztmzzju1mzy0ndrlyjzkytq5mjm1mzcwmjezzij9   
创建项目
如下图:
社区库调用
①设置依赖
社区库是指已经由贡献者上架到 npm 中心供其他开发者下载使用的库,调用这类库的步骤如下:
首先需要设置 harmonyos npm 三方包的仓库信息,在 deveco studio 的 terminal 窗口执行如下命令进行设置:
npm config set @ohos:registry=https://repo.harmonyos.com/npm/  然后通过如下两种方式设置 harmonyos npm 三方包依赖信息(下面步骤以 @ohos/lottieets 三方库为例,其他库替换对应库的名字及版本号即可):  
方式一:在 terminal 窗口中,执行如下命令安装 harmonyos npm 三方包,deveco studio 会自动在工程的 package.json 中自动添加三方包依赖。
npm install @ohos/lottieets --save     
方式二:在工程的 package.json 中设置 harmonyos npm 三方包依赖,配置示例如下:
dependencies: {        @ohos/lottieets: ^1.0.2}    依赖设置完成后,需要执行 npm install 命令安装依赖包,依赖包会存储在工程的 node_modules 目录下。  
②引入配置的社区库,并实现对社区库动画的调用
首先在如图路径,创建动画的数据文件 data.json: 接着在 pages 目录下创建文件 outer.ets 用于引用社区库动画,主要代码如下。
通过 import 的方式引入配置的社区库,设置画布,用于展示动画:
import lottie from '@ohos/lottieets';@componentexport struct outer {  private renderingsettings: renderingcontextsettings = new renderingcontextsettings(true);  private renderingcontext: canvasrenderingcontext2d = new canvasrenderingcontext2d(this.renderingsettings);  private animatename: string = 'data';  private animateitem: any = null;  @state canvastitle: string = '';  abouttodisappear(): void {    lottie.destroy();  }  onpageshow(): void {    lottie.play();  }  onpagehide(): void {    lottie.pause();  }    下图为该社区库的一些 api 接口说明截图,在 node_modules 下的 index.d.ts 文件里。
调用的主要代码:
column() {        canvas(this.renderingcontext)          .width('100%')          .aspectratio(1.76)          .backgroundimage($r('app.media.canvasbg'))          .backgroundimagesize(imagesize.cover)          .ondisappear(() => {            lottie.destroy(this.animatename);          })      column({ space: 12}) {        button() {          text('加载动画')            .fontsize('16fp')            .fontcolor(#007dff)            .fontweight(fontweight.bold)        }        .width('100%')        .height('40vp')        .backgroundcolor(#dedbdb)        .onclick(() => {          this.canvastitle = 加载动画;          this.animateitem = lottie.loadanimation({            container: this.renderingcontext,            renderer: 'canvas',            loop: 10,            autoplay: true,            name: this.animatename,            path: 'common/lottie/data.json'          });        })     
最后在主页面通过 navigation 组件,引用 outer 组件,代码如下:
import { outer } from './outer';@entry@componentstruct index {  private controller: tabscontroller = new tabscontroller();  @state currentindex: number = 0;  @builder navigationtitle() {    column() {      text(库的调用)        .fontcolor(color.black)        .lineheight(33vp)        .fontsize('24fp')        .fontweight(fontweight.bold)    }    .height('56vp')    .justifycontent(flexalign.center)  }  @builder tabbuilder(index: number) {    column() {      column() {        text(index === 0 ?本地调用 : 社区调用)          .fontcolor(this.currentindex === index ? #007dff : #182431)          .fontsize('16fp')      }      .height('100%')      .justifycontent(flexalign.center)      .border(this.currentindex === index        ? {width: { bottom:'1vp' }, color:#007dff }        : {}      )    }    .height('56vp')    .padding({ top:'10vp', bottom: '10vp'})    .justifycontent(flexalign.center)  }  build() {    column() {      navigation() {        tabs({ barposition: barposition.start, controller: this.controller }) {          tabcontent() {//            inner()          }.tabbar(this.tabbuilder(0))          tabcontent() {            outer()          }.tabbar(this.tabbuilder(1))        }        .barwidth('80%')        .barheight('56vp')        .onchange((index: number) => {          this.currentindex = index;        })      }      .title(this.navigationtitle)      .hidebackbutton(true)      .titlemode(navigationtitlemode.mini)    }    .backgroundcolor(#f1f3f5)  }}

昆仑医云提供基于深度学习的AI软件
什么是戴骨传导耳机,它会带来怎样的体验
工业物联网如何推动智慧城市的数字经济发展
8位CMOS单片机HS23P6836/45概述、特征及应用电路
消费者该如何面对电动汽车换代太快的问题
鸿蒙开发中库的调用
供需格局改善,六氟磷酸锂价格上涨具有持续性
变频器电磁干扰的原因?
50个经典的西门子300PLC问题
国产石墨烯电池亮相:15分钟充满5000mAH逆天!
各色特性的气体传感类型,技术优势各有千秋
点对多点的多任务无线通信
中国5G发展现状与未来趋势 三大重点值得关注
手机定制为什么对名车品牌情有独钟
七款旗舰手机对比谁拍照最好
2027年智慧城市市场的发展情况预测分析
美国欲剥夺华为数千专利权 明抢中国企业的知识产权和专利技术
2020年,BMW一下子多出来两家电池供应商
什么构成了电压调节模块(VRM)?芯片的电源传输简介
三星电子智能传感系统提升半导体工厂产量与自动化