当前位置: 首页 > 科技观察

鸿蒙应用开发:如何对接组件库(Glide)?

时间:2023-03-21 01:17:49 科技观察

更多信息请访问:https://harmonyos.51cto.com,与华为官方战略合作共建的鸿蒙技术社区。Android不仅提供了很多API,还提供了很多第三方库。这为我们的开发者降低了开发难度,提高了开发效率,让应用开发变得更简单、更高效。众所周知,HarmonyOS除了提供16000多个API外,还支持组件库调用,那么HarmonyOS应用开发如何对接第三方库呢?加载图片是每个应用程序都需要的一个功能,在Android平台上是有提供的。有Glide、ImageLoader、Picasso,其中Glide最为开发者所熟知,所以我将以Glide为例,验证在HaronyOS开发中如何使用图片加载库。以后我们要引入我厂搭建的鸿蒙版ZEGOExpressSDK时,可以按照下面的依赖方式。在开发过程中,我们需要加载图片,也可以参考下面的图片加载过程。1、组件库的依赖方式(Glide)HarmonyOS应用开发提供了三种常用的组件库导入方式。下面三个依赖方法都是在build.grade中操作的。1、Maven仓库的依赖方式这是下面验证过程中图片加载库Glide使用的方式。第一步:allprojects{repositories{maven{url'https://repo.huaweicloud.com/repository/maven/'}jcenter()mavenCentral()}}第二步:dependencies{implementationfileTree(dir:'libs',include:['*.jar','*.har'])实现'io.openharmony.tpc.thirdlib:glide:1.1.2'}2。模块依赖dependencies{implementationfileTree(dir:'libs',include:['*.jar','*.har'])implementationproject(path:':glidelibrary')}如果在setting.gradle中没有配置glidelibrary,必须手动添加,如下:include':entry',':glidelibrary'3.har包依赖dependencies{implementationfileTree(dir:'libs',include:['*.jar','*.har'])}2.组件库的使用(Glide)1.开发中的配置你需要做的配置之前在config.json中工作。允许HTTP请求:"deviceConfig":{"default":{"network":{"cleartextTraffic":true}}}网络权限设置:"module":{"reqPermissions":[{"name":"ohos.permission.互联网"}]}2。加载图片图片的来源可以是网上的图片,也可以是工程文件中的图片。两种方法的加载方式如下。要加载的图片来自网络load()中选择的imagePath,本地图片选择的是imageResourceId。调用方法:Imageimage=(Image)findComponentById(ResourceTable.Id_img);//LoadImagefromInternet(图片来源于Zego官网网络图)StringimagePath="https://www.zego.im/_nuxt/img/53992d2.png";//LoadImagefromResourceFolder(本地图片)intimageResourceId=ResourceTable.Media_zego_img;Glide.with(this).load(imagePath).diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true).into(image);运行结果显示:3.加载GIF动画加载的GIF图片可以是网络图片,也可以是本地图片。调用方式:DraweeViewdraweeView=(DraweeView)findComponentById(ResourceTable.Id_draweeView);StringimagePath="loadgifffromnetwork";intimageResourceId="loadgiffromnative";Glide.with(this).asGif().load(imageResourceId).into(draweeView);HarmonyOSImage不支持gif加载,因为Image和Element是独立的,不能用Element重绘。所以Glide需要借助DraweeView才能使用gif的能力。因为加载gif的过程对系统性能消耗较大,使用后应及时释放资源,防止内存泄漏。@OverrideprotectedvoidonBackground(){super.onBackground();draweeView.stopGif();}4.Loadtheroundedcornerimage加载圆角图片,传入圆角raduis,即可绘制圆角。publicclassGlideRoundTransformextendsBitmapTransformation{privatestaticfloatradius=0f;publicGlideRoundTransform(Contextcontext){this(context,0);}publicGlideRoundTransform(Contextcontext,intdp){super();this.radius=dp;}@OverrideprotectedPixelMaptransform(@NonNlsBitmapPoolpool,@NonNlsPixelMaptoTransform,,intoutHeight){intwidth=toTransform.getImageInfo().size.width;intheight=toTransform.getImageInfo().size.height;PixelFormatconfig=toTransform.getImageInfo()!=null?toTransform.getImageInfo().pixelFormat:PixelFormat.ARGB_8888;PixelMapbitmap=pool.get(宽度,高度,配置);setCanvasBitmapDensity(toTransform,位图);Canvascanvas=newCanvas(newTexture(位图));canvas.drawPixelMapHolderRoundRectShape(newPixelMapHolder(toTransform),newRectFloat(0,0,width,height),newRectFloat(0,0,width,height),radius,radius);returnbitmap;}@OverridepublicvoidupdateDiskCacheKey(MessageDigestmessageDigest){}}调整方式:Imageimage=(Image)findComponentById(ResourceTable.Id_img);RequestOptionsmyOptions=newRequestOptions().transform(newGlideRoundTransform(getContext(),30));Glide.with(this).load(ResourceTable.Media_zego_img_round).diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true).fitCenter().apply(我的选项)。进入(图像);总结通过Glide的引入过程和实现过程,Android第三方库的引入和图片加载没有太大区别。以此类推,我们可以很方便地引入其他组件库,或者通过Glide实现其他图片加载效果。同时也期待我厂即将打造的鸿蒙版ZEGOExpressSDK。了解更多请访问:Harmonyos.com,与华为战略合作的鸿蒙科技社区,https://harmonyos.51cto.com