HarmonyOS4.0从零开始的开发教程20三方库的基本使用

HarmonyOS(十八)三方库的基本使用

三方库概述

三方库是开发者在系统能力的基础上进行了一层具体功能的封装,对其能力进行拓展,提供更加方便的接口,提升开发效率的工具。如果是发布到开源社区,称为开源三方库,开发者可以通过访问开源社区获取。而一些团队内部开发使用的三方库,没有发布到开源社区的称为内部三方库。本课程主要介绍开源三方库。

如何获取三方库

目前提供了两种途径获取开源三方库:

  1. 通过访问

    Gitee网站

    开源社区获取

    在Gitee中,搜索OpenHarmony-TPC仓库,在tpc_resource中对三方库进行了资源汇总,可以供开发者参考。

  2. 通过

    HarmonyOS开发者

    官网提供的资源中心获取

    进入HarmonyOS开发者官网选择 开发>DevEco Service,在DevEco Service页面下找到资源中心,在资源中心找到三方库入口。

常用三方库介绍

常用的三方库可以分为UI、动画、网络、数据、安全、多媒体、框架、工具等。

  • UI库:

    • PhototView:可以通过该组件快速实现图片的缩放、平移和旋转等操作。
    • RoundImageView:可以生成圆角矩形、或者椭圆形等图片形状。
  • 网络库:

    • HttpClient:其以耳熟能详的OKHTTP为基础,整合android-async-http、AutobahnAndroid、OkGo等库的功能特性,实现了自定义拦截器、cookie管理等功能。
    • axios:运行在nodejs和浏览器中的axios,也是比较熟知的基于promise的网络请求库,同样实现了强大的网络功能。
  • 动画库:

    • lottie:用于解决应用中复杂动画的问题。
    • reboud:可以模拟弹簧动力学,实现驱动物理效果等。

其他类别不单独介绍,感兴趣的可以通过以上获取途径进行访问了解详情。

三方库在系统能力的基础上,提供了更加方便的使用,在许多场景下,能够极大提升开发者的开发效率,下面将以lottie为例介绍三方库的基本使用。

使用开源三方库lottie

什么是lottie

lottie是基于lottie-web开发,集成在三方库社区内的开源版本,是HarmonyOS系统中复杂动画的一种解决方案。

动画是传达想法和创造更好的用户交互体验的工具,常见使用动画的场景如下:

  • 启动动画:APP logo动画的播放。
  • 加载动画:网络请求的loading动画。
  • 上下拉刷新动画:请求更多资源时的刷新动画。
  • 按钮动画:切换按钮、编辑按钮、播放按钮等按钮的切换过渡动画。
  • 视图转场动画:一些场景的转场添加动画能够提升用户体验。

lottie提供了使用JSON动画文件的解决方案,开发者可以在原生应用中像使用静态图像一样使用动画,而不用关注动画的实现过程,并且lottie具有一套完整的API控制动画的行为,可以让动画更具有交互性。接下来将介绍lottie的安装和基本使用。

lottie的安装与卸载

  • 安装lottie

    通过ohpm执行对应的指令,将lottie安装到项目中。

    ohpm install @ohos/lottie
    
  • 卸载lottie

    通过ohpm执行卸载指令,将lottie从项目中删除,其程序包和配置信息将会从项目中移除。

    ohpm uninstall @ohos/lottie
    

使用lottie

  • lottie的引入

    通过import指令在项目中引入lottie到文件中。

    import lottie from '@ohos/lottie'
    
  • 构建Canvas画布

    lottie解析JSON动画文件的数据需要基于Canvas 画布进行2D渲染,所以在加载JSON动画之前,要先初始化渲染上下文,并在画面中创建Canvas画布区域,将对应的渲染上下文renderingContext传递给Canvas。

    // 初始化渲染上下文  
    private renderingSettings: RenderingContextSettings = new RenderingContextSettings(true) // 设置开启抗锯齿
    private renderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.renderingSettings)  // 创建2D渲染上下文// 加载Canvas画布   
    Canvas(this.renderingContext)...
    
  • 使用lottie加载JSON动画

    加载JSON动画需要用到loadAnimation方法,在方法中需配置相应的初始设置,包括渲染上下文、渲染方式以及JSON动画资源的路径等。可以直接使用lottie.loadAnimation方法,也可以用一个animationItem实例来接收返回的animationItem对象。

    // 用animationItem实例接收
    let animationItem = lottie.loadAnimation({container: this.renderingContext,            // 渲染上下文renderer: 'canvas',                          // 渲染方式loop: 10,                                    // 设置为循环播放10次autoplay: true,                              // 是否自动播放,默认truepath: 'common/lottie/data.json',             // json路径})
    // 或者直接使用      lottie.loadAnimation({container: this.renderingContext,            // 渲染上下文renderer: 'canvas',                          // 渲染方式loop: true,                                  // 默认为trueautoplay: true,                              // 是否自动播放,默认truepath: 'common/lottie/data.json',             // json路径})
    
  • lottie控制动画

    lottie内封装了包括状态控制,进度控制,播放设置控制和属性控制等多个API,用户可以利用这些API完成对动画的控制,实现更加灵活的交互效果。

    // 播放、暂停、停止、销毁  可以使用lottie,也可以使用animationItem实例进行控制
    lottie.play();        // 从目前停止的帧开始播放
    lottie.stop();        // 停止播放,回到第0帧
    lottie.pause();       // 暂停该动画,在当前帧停止并保持
    lottie.togglePause(); // 切换暂停/播放状态
    lottie.destroy();     // 删除该动画,移除相应的元素标签等。在unmount的时候,需要调用该方法// 播放进度控制
    animationItem.goToAndStop(value, isFrame); // 跳到某个时刻/帧并停止。isFrame(默认false)指示value表示帧还是时间(毫秒)
    animationItem.goToAndPlay(value, isFrame); // 跳到某个时刻/帧并进行播放
    animationItem.goToAndStop(30, true);       // 例:跳转到第30帧并停止
    animationItem.goToAndPlay(300);            // 例:跳转到第300毫秒并播放// 控制帧播放
    animationItem.setSegment(5,15);             // 限定动画资源播放时的整体帧范围,即设置动画片段
    animationItem.resetSegments(5,15);          // 重置播放的动画片段
    animationItem.playSegments(arr, forceFlag); // arr可以包含两个数字或者两个数字组成的数组,forceFlag表示是否立即强制播放该片段
    animationItem.playSegments([10,20], false); // 例:播放完之前的片段,播放10-20帧
    animationItem.playSegments([[5,15],[20,30]], true); //例: 直接播放5-15帧和20-30帧// 动画基本属性控制
    lottie.setSpeed(speed);         // 设置播放速度,speed为1表示正常速度
    lottie.setDirection(direction); // 设置播放方向,1表示正向播放,-1表示反向播放// 获取动画帧数属性
    animationItem.getDuration();    //获取动画时长
    
  • 事件订阅

    在一些特殊场景下,比如开始加载动画或者动画播放结束时,可能需要执行相应的操作,在lottie中提供了事件订阅和取消订阅的功能,当触发对应的event,会执行传入的回调函数,用户可以在回调函数中完成要实现的功能。

    // 订阅事件
    animationItem.addEventListener(event,function(){// TODO something
    })// 取消订阅事件
    animationItem.removeEventListener(event,function(){// TODO something
    })
    

    常见的event事件类型如下:

    // event事件类型
    'enterFrame'   // 每进入一帧就会触发
    'loopComplete' // 当前循环下播放(循环播放/非循环播放)结束时触发
    'complete'     // 播放完成时触发
    'segmentStart' // 播放指定片段时触发,playSegments、resetSegments等方法刚开始播放指定片段时会发出,如果playSegments播放多个片段,多个片段最开始都会触发。
    'destroy'      // 销毁动画时触发
    'data_ready'   // 数据准备完成
    'DOMLoaded'    // 动画相关dom已经被添加
    'error'        // 出现错误
    'data_failed'  // 数据加载失败...
    

参考链接

  • 三方库资源汇总:https://gitee.com/openharmony-tpc/tpc_resource
  • lottie的使用:https://gitee.com/openharmony-tpc/lottieETS

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

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

相关文章

高级算法设计与分析(二) -- 递归与分治策略

系列文章目录 高级算法设计与分析(一) -- 算法引论 高级算法设计与分析(二) -- 递归与分治策略 高级算法设计与分析(三) -- 动态规划 未完待续【 高级算法设计与分析(四) -- 贪…

CCD相机和CMOS相机有什么区别

问题描述:CCD相机和CMOS相机有什么区别。在阅读一些论文时,常看到工业上的检测常用到CCD相机,和我们熟知的CMOS相机有什么区别呢。 问题解答: CCD相机: 原理: 光电转换: 光子被感光芯片上的…

面试经典150题(32-37)

leetcode 150道题 计划花两个月时候刷完,今天(第十五天)完成了6道(32-37)150: 今天刚好有点没精神的感觉,然后碰到的题也不难。。天意!!! 32.(289. 生命游戏&#xff0…

iEnglish:家校协同培养学生自主阅读习惯

近日,2023年最新一期365天和1000天“iEnglish学习成长营”顺利结营。据悉,截至今年12月,在家庭场景中完成365天和1000天不间断阅读人数分别突破15万人和2万人。 近年来,全民终身学习的学习型社会不断深入推进,基础教育中对于学生的综合阅读能力素养新要求不断更新。提升孩子的…

【Git】Git基本操作

文章目录 Git 是什么Git 的优点Git 安装Linux UbuntuLinux CentOsWindows Git 基本操作1. 创建 Git 本地仓库2. 配置 Git3. Git工作区、暂存区和版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退 Git 是什么 Git是一个免费的、开源的分布式版本控制系统,…

【Linux】ip命令使用

ip命令 用于管理与配置网络接口和路由表。 ip命令的安装 ip 命令来自 iproute2 软件包,在 CentOS 7 中默认已安装。 yum install -y iproute 语法 ip [ OPTIONS ] OBJECT { COMMAND | help }ip [ -force ] -batch filename选项及作用 执行令 : ip …

TCP的拥塞控制_基础知识_四种拥塞控制方法

TCP的拥塞控制 一.拥塞控制的基本概念 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞 。 计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络的资源 若出现拥塞…

spring boot 配置多数据源 踩坑 BindingException: Invalid bound statement (not found)

在上一篇:《【已解决】Spring Boot多数据源的时候,mybatis报错提示:Invalid bound statement (not found)》 凯哥(凯哥Java) 已经接受了,在Spring Boot配置多数据源时候,因为自己马虎,导致的一个坑。下面&a…

Notepad++:多行数据操作

1)删除关键字之后(或之前)的所有字符 删除s之后(包含s)的所有内容;快捷键:s.*$ 替换成功 删除s之前(包含s)的所有内容;快捷键:^.*s 2&#xff09…

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中,Tensor(张量)是一种数据结构,用于存储和操作多维数组。张量可以被视为一种扩展的矩阵,它可以具有任意数量的维度。 在深度学习中,张量通常被用来表示神经网络的输入…

Spring Cloud微服务 - Eureka注册中心详解与实际项目应用

简介 在如今的软件开发领域,微服务架构已成为一种流行的架构模式,它将一个大型应用拆分成多个小的、独立运行的微服务。而为了管理这些微服务的注册与发现,Spring Cloud提供了Eureka注册中心。本文将深入探讨Eureka注册中心的工作原理&#…

PowerDesigner生成数据字典

这里写自定义目录标题 1,创建物理模型2,创建数据源连接3,获取表4,创建报告 先看下最终效果 1,创建物理模型 2,创建数据源连接 填写数据源连接信息 测试连接是否成功 3,获取表 连接刚创建的数…

使用多个GBASE南大通用DataAdapter 填充 DataSet

一个 DataSet 可以与很多GBASE南大通用DataAdapter 对象一起使用。每个GBASE南大通用DataAdapter 都可用于填充一个或多个 DataTable 对象并将更新解析回数据源。DataRelation 对象可以在本地添加到 DataSet,这样您就可以关联来自不同数据源的数据。一个或多个 GBAS…

Springboot数据校验与异常篇

一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…

react基于antd二次封装分页组件Pagination

目录 react基于antd二次封装分页组件Pagination组件PaginationCom使用组件 react基于antd二次封装分页组件Pagination 组件PaginationCom import { Pagination } from antd; import propTypes from "prop-types"; import React from react;const PaginationCom (p…

网络安全工作者应该注意的八大事项!

1、珍惜给老板汇报的机会 能够称为“企业家”的老板,往往都是“管理学”的精英,也往往对生产安全工作略知一二,在向其汇报工作时,请突出重点、言简意赅,在抛出问题的同时,一定要提出相应的解决措施&#x…

[PyTorch][chapter 8][李宏毅深度学习][Back propagation]

前言: 反向传播算法(英:Backpropagation algorithm,简称:BP算法)是一种监督学习算法,常被用来训练多层感知机。 它用于计算梯度计算中,降低误差。 目录: 链式法则 模型简介(Model) 损失函…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别: 1.sobol计算依赖于验证集样本,无需定义变量上下限。 2.SW-ELM自带激活函数,计算具有phi(x)e^x激…

Unity--解析ET6接入ILRuntime实现热更

前言 1.介绍 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。学习交流聚集地 介绍 — ILRuntime …

第二证券:诱多诱空是指什么?股民该如何应对?

诱多诱空是指什么? 诱多诱空各指代主力的一类操盘行为。诱多是指主力有意营建股价上涨的假象,从而诱使不知情股民买入该股,主力趁机抛售股票离场,因为本身股价上涨靠主力一手织造,主力撤资后股价会回落,买…