Android 发展到现在不仅提供了很多 API,还提供了很多第三方库。这降低了我们开发者的开发难度,提升了开发效率,让应用开发更加的简单高效。众所周知,HarmonyOS 除了提供 16000 多个 API 外也是支持组件库的调用的,那么鸿蒙应用开发是如何与第三方库衔接的呢?

加载一张图片是每个应用所需的功能,在 Android 平台提供的有 Glide、ImageLoader、Picasso,其中 Glide 最被开发者熟知,所以我就以 Glide 作为例子验证在 HaronyOS 开发中如何使用图片加载库。

以后要引入我厂即构 ZEGO Express SDK 鸿蒙版本的时候可以根据以下的依赖方式,开发过程中需要图片的加载,也可以借鉴以下的图片加载过程。

一、组件库(Glide)的依赖方式

HarmonyOS 应用开发提供了三种常用的组件库引入方式,以下的三种依赖方式都是在 build.grade 中操作。

  1. Maven 仓的依赖方式

以下验证过程的图片加载库 Glide 采用的就是这种方式。

步骤一:

allprojects {
repositories {
maven {
url 'https://repo.huaweicloud.com/repository/maven/'
}
jcenter()
mavenCentral()
}
}

步骤二:


dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
implementation 'io.openharmony.tpc.thirdlib:glide:1.1.2'
}

2.  Module 的依赖方式

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
implementation project(path: ':glidelibrary')
}

如果在setting.gradle 没有对该 glidelibrary 的配置,就要手动添加,如下。

include ':entry', ':glidelibrary'

3.  Har 包的依赖方式

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
}

二、组件库(Glide)的使用

1.  配置

在开发前需要在 config.json 中做好配置的工作。允许 HTTP 的请求:

"deviceConfig": {
"default": {
"network": {
"cleartextTraffic": true
}
}
}

网络权限的设置:

"module": {
"reqPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}

2.  加载图片

图片的来源可以是网络的图片、也可以是项目文件的图片。两种方式的加载方式如下,加载的图片来源于网络 load() 的选择 imagePath,本地图片就选择 imageResourceId。

调用方式:


Image image = (Image)findComponentById(ResourceTable.Id_img);
//Load Image from Internet(图片来源于 即构官网的网络图)
String imagePath = "https://www.zego.im/_nuxt/img/53992d2.png";
//Load Image from Resource Folder(本地图片)
int imageResourceId = ResourceTable.Media_zego_img;
Glide.with(this)
.load(imagePath)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(image);

运行结果显示:

  1. 加载GIF动图

加载的GIF 图可以是网络图片,也可以说本地图片。调用方式:

DraweeView draweeView = (DraweeView) findComponentById(ResourceTable.Id_draweeView);
String imagePath = "load gif from network";
int imageResourceId = "load gif from native";
Glide.with(this)
.asGif()
.load(imageResourceId)
.into(draweeView);

HarmonyOS 的Image 不支持gif 的加载,因为Image和Element是独立的,不能使用Element重绘。所以 Glide 要使用 gif 的能力就要使用 DraweeView 。

<com.bumptech.glide.load.resource.gif.drawableability.DraweeView
ohos:id="$+id:draweeView"
ohos:height="180vp"
ohos:width="180vp"
ohos:layout_alignment="center"/>

因为加载 gif 的过程,对系统的性能消耗是非常大的,所以在使用完的时候要及时释放资源,防止内存泄漏。

@Override
protected void onBackground() {
super.onBackground();
draweeView.stopGif();
}

4.  加载圆角图片

加载圆角图片,把圆角 raduis 传进来,就可以绘制圆角度。

调用方式:

Image image = (Image) findComponentById(ResourceTable.Id_img);
RequestOptions myOptions = new RequestOptions().transform(new GlideRoundTransform(getContext(), 30));
Glide.with(this)
.load(ResourceTable.Media_zego_img_round)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.apply(myOptions)
.into(image);

三、总结

通过对 Glide 的引入过程与实现过程,跟Android 第三方库引入与图片加载没有很大的区别。

举一反三,我们可以很轻松的引入其他的组件库,也可以通过 Glide 实现其他的图片加载效果。同时一起期待我厂 即构 ZEGO Express SDK 的鸿蒙版本吧。

鸿蒙应用开发:如何与组件库(Glide)衔接?的更多相关文章

  1. 如何从0开发一个Vue组件库并发布到npm

    1.新建文件夹在终端打开执行 npm init -y 生成package.json如下,注意如果要发布到npm,name不能有下划线,大写字母等 { "name": "v ...

  2. 从0开始用webpack开发antd,react组件库npm包并发布

    一.初始化一个npm包 1.新建一个文件夹(名称随意,建议和报名一致),输入命令 :npm init -y 会自动生成一个包的说明文件 package.json如下(本文以scroll-antd-ta ...

  3. 从零开发一款自己的小程序UI组件库(一)

    写在前面:有开发过小程序的朋友肯定知道组件化开发的特性,高内聚与低耦合.使用已有的UI组件库,诸如:vantUI-weapp.minUI-weapp等UI组件库的诞生使我们的开发速度大大的加快,丰富的 ...

  4. 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率

    无论是 vue2 全家桶还是 vue3 + vite + TypeScript,组件库的使用几乎大家都会,但自己开发一个独立组件库就不是每个人都掌握的,因为搭建组件库的基础开发环境,就会让很多同学望而 ...

  5. 最全华为鸿蒙 HarmonyOS 开发资料汇总

    开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...

  6. RSuite 一个基于 React.js 的 Web 组件库

    RSuite http://rsuite.github.io RSuite 是一个基于 React.js 开发的 Web 组件库,参考 Bootstrap 设计,提供其中常用组件,支持响应式布局. 我 ...

  7. React 组件库框架搭建

    前言 公司业务积累了一定程度,需要搭建自己的组件库,有了组件库,整个团队开发效率会提高恨多. 做组件库需要提供开发调试环境,和组件文档的展示,调研了几个比较主流的方案,如下: docz 配置简单,功能 ...

  8. 值得收藏的8个Web端组件库

    值得收藏的8个Web端组件库 Ant Design 介绍:一个服务于企业级产品的设计体系,基于『确定』和『自然』的设计价值观和模块化的解决方案,让设计者专注于更好的用户体验. 组件库地址:https: ...

  9. [转载]前端——实用UI组件库

    https://www.cnblogs.com/xuepei/p/7920888.html Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https:/ ...

  10. 【转】前端——实用UI组件库

    Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

随机推荐

  1. HTB- Archetype

    端口扫描 nmap -sV -sT 10.129.1.1 smbclint smbclient -L 10.129.149.214 获取密码 smbclient //10.129.149.214/ba ...

  2. Pluto 轻松构建云应用:开发指南

    开发者只需在代码中定义一些变量,Pluto 就能基于这些变量自动创建与管理必要的云资源组件,达到简化部署和管理云基础设施的目的,让开发者更容易使用云. 这里的云资源并非指 IaaS,而是指 BaaS. ...

  3. leetcode简单(设计):[225, 232, 303, 703, 705, 706, 933, 1603, 1656, 09, 30, 041, 03.06]

    目录 225. 用队列实现栈(先入后出) 232. 用栈实现队列(先入先出) 303. 区域和检索 - 数组不可变 703. 数据流中的第 K 大元素 705. 设计哈希集合 706. 设计哈希映射 ...

  4. [oeasy]python0133_[趣味拓展]颜文字_流石兄弟_表情文字_2ch_kaomoji

    颜文字 回忆上次内容 上次我们了解unicode 里面有各种字体 甚至还有emoji   emoji 本质上也是文字 按照unicode的方式编码 存储时按照utf-8的方式编码 显示时按照系统定义的 ...

  5. 解读GaussDB(for MySQL)灵活多维的二级分区表策略

    本文分享自华为云社区<GaussDB(for MySQL)创新特性:灵活多维的二级分区表策略>,作者:GaussDB 数据库. 背景介绍 分区表及二级分区表的功能,可以让数据库更加有效地管 ...

  6. 最强AI语音克隆和文本配音工具!与真人无异,CosyVoice下载介绍

    CosyVoice是一个大规模预训练语言模型,深度融合文本理解和语音生成的一项新型语音合成技术,能够精准解析并诠释各类文本内容,将其转化为宛如真人般的自然语音 CosyVoice采用了总共超15万小时 ...

  7. 学习笔记--Java面向对象的继承

    Java面向对象的继承 继承 继承是面向对象的三大特性之一 继承基本作用:代码复用:重要作用:有了继承才能有以后的"方法的覆盖"和"多态" 继承语法格式: [修 ...

  8. JMeter 配置元件之按条件读取CSV Data Set Config

    实践环境 win10 JMeter 5.4.1 需求描述 需求是这样的,需要压测某个接口(取消分配接口),请求这个接口之前,需要先登录系统(物流WMS系统),并在登录后,选择并进入需要操作的仓库,然后 ...

  9. JAVA Spring Boot快速开始

    实践环境 Spring Boot 3.2.1 Maven 3.8.8 JDK 1.8.0_331 创建项目 通过http://start.spring.io/网站创建包含Spring Boot的项目, ...

  10. 解决Prism中对话框服务中对话框开启时回调函数不会触发的问题

    解决办法 新建一个类DialogServiceExtend,然后在再注册 public class DialogServiceExtend : DialogService { public Dialo ...