HarmonyOS 鸿蒙Next如何导入第三方库?

HarmonyOS 鸿蒙Next如何导入第三方库? 一.有哪些支持Harmony OS的第三方库?

第三方库下载地址:

1 https://gitee.com/openharmony-tpc/tpc_resource?_from=gitee_search#%E5%BC%80%E6%BA%90%E4%B8%89%E6%96%B9%E5%BA%93%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB

2 https://ohpm.openharmony.cn/#/cn/home

二. 如何加入到DevEco Studio工程

以 lottie为例

https://gitee.com/openharmony-tpc/lottieArkTS

1 安装lottie库

  1. 在DevEco Studio的底部找到"Terminal"

  2. 输入:ohpm install @ohos/lottie

3)输出:install completed in xxx s,就表示安装成功

2 查看工程依赖情况

1)在目录"oh_modules" 已经新增了 lottie

  1. 在工程的oh_package.json5文件中的"dependencies"中也增加了lottie

三. 如何使用

1.在相应的类中引入组件:

import lottie from '[@ohos](/user/ohos)/lottie'

2.构建渲染上下文

private mainRenderingSettings: RenderingContextSettings = new RenderingContextSettings(true)
private mainCanvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.mainRenderingSettings)

3.将动画需要的json文件放到pages同级别目录下,然后引用。(json路径为entry/src/main/ets/common/lottie/data.json)

注意:json文件路径不能使用 ./ 或者 …/ 等相对路径,相对路径获取不到动画源数据,会导致动画加载不出来,传递给loadAnimation 方法的路径是相对于pages父文件夹为基准的,而index页面内引入的相对路径的动画是以index.ets文件为基准的,两者基准不一致。

所以如果json文件放置在pages文件夹下,路径应为 ‘pages/common/data.json’ 样式

private path:string = "common/lottie/data.json"
或
private jsonData:string = {"v":"4.6.6","fr":24,"ip":0,"op":72,"w":1000,"h":1000,"nm":"Comp 2","ddd":0,"assets":[],...}

4.关联画布

Canvas(this.mainCanvasRenderingContext)
.width('50%')
.height(360 + 'px')
.backgroundColor(Color.Gray)
.onReady(()=>{
//抗锯齿的设置
this.mainCanvasRenderingContext.imageSmoothingEnabled = true;
this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium'
})

注意:canvas设置的宽高比例建议和动画json资源里面的宽高比例一致,如:json动画资源里的宽高比例是 1:2 ,则canvas设置的宽高也是 1:2

  • 想要的抗锯齿效果:mainCanvasRenderingContext.imageSmoothingEnabled = true 与 mainCanvasRenderingContext.imageSmoothingQuality = ‘medium’

  • 动画绘制前会对canvas画布进行清空处理,画布清空后再绘制动画。

5.加载动画

加载动画的时机需要注意,点击按钮加载动画可按照正常逻辑放在点击事件内,如果想要实现进入页面自动播放动画,需要结合Canvas组件的onReady()生命回调周期实现,加载动画时机需放置在onReady()生命周期回调内或及之后。

同一Canvas组件加载多次/不同动画资源,需要手动销毁动画(lottie.destroy()/animationItem.destroy()),之后才可再次加载其他动画资源。

lottie.destroy('2016'); //加载动画前先销毁之前加载的动画
this.animationItem = lottie.loadAnimation({
        container: this.mainCanvasRenderingContext,  // 渲染上下文
        renderer: 'canvas',                          // 渲染方式
        loop: true,                                  // 是否循环播放,默认true
        autoplay: true,                              // 是否自动播放,默认true
        name: '2016',                                // 动画名称
        contentMode: 'Contain',                      // 填充的模式
        frameRate: 30,                               //设置animator的刷帧率为30
        imagePath: 'lottie/images/',                 // 加载读取指定路径下的图片资源
        path: this.path,                             // json路径
        initialSegment: [10,50]                      // 播放的动画片段
      })
或      
lottie.loadAnimation({
        container: this.mainCanvasRenderingContext,  // 渲染上下文
        renderer: 'canvas',                          // 渲染方式
        loop: true,                                  // 是否循环播放,默认true
        autoplay: true,                              // 是否自动播放,默认true
        contentMode: 'Contain',                      // 填充的模式
        frameRate: 30,                               //设置animator的刷帧率为30
        animationData: this.jsonData,                // json对象数据
        initialSegment: [10,50]                      // 播放的动画片段
      })
或
lottie.loadAnimation({
        uri: "https://assets7.lottiefiles.com/packages/lf20_sF7uci.json",  // uri网络资源
        container: this.canvasRenderingContext,                            // 渲染上下文
        renderer: 'canvas',                                                // canvas 渲染模式
        loop: true,                                                        // 是否循环播放,默认true
        autoplay: true,                                                    // 是否自动播放,默认true
        name: this.animateName,                                            // 动画名
      })

加载动画时,path 参数和 animationData 参数,二者选其一。

  • path 参数:只支持加载entry/src/main/ets 文件夹下的相对路径,不支持跨包查找文件。
  • animationData 参数:可结合ResourceManager进行读取资源文件内容进行设置。
  • uri 参数:支持加载网络资源和通过URI路径方式加载动画,该方式需申请 ohos.permission.INTERNET,ohos.permission.GET_NETWORK_INFO两个权限。
  • 加载外部资源图片:应用默认读取沙箱路径下的图片,如果沙箱下没有对应的资源图片,则会继续读取rawfile下的对应资源图片

更多关于HarmonyOS 鸿蒙Next如何导入第三方库?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next如何导入第三方库?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next系统中导入第三方库,可以通过以下步骤实现:

首先,确保你已经在鸿蒙开发环境中创建了一个项目。如果尚未创建,请先通过DevEco Studio或其他鸿蒙开发工具创建一个新的项目。

接下来,找到你想要导入的第三方库。这些库通常以.har(HarmonyOS Archive)或.apk(Android Package,但需注意兼容性问题)等格式存在。确保这些库文件与你的鸿蒙项目兼容。

然后,将第三方库文件添加到你的项目中。在DevEco Studio中,你可以通过“Project”视图找到项目的根目录,将库文件拖放到合适的文件夹下,如libs文件夹(如果项目中没有,可以手动创建)。

之后,你需要在项目的build.gradle文件中配置依赖。对于.har文件,通常需要在dependencies块中添加对应的依赖项,具体语法可能因库的不同而有所差异。请查阅第三方库的官方文档以获取准确的依赖配置。

最后,同步项目并尝试构建。如果一切顺利,第三方库应该已经成功导入到你的鸿蒙项目中,并可以在代码中使用。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部