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

OpenHarmony-ArkUI(ETS)自定义图片查看器

时间:2023-03-18 11:51:49 科技观察

了解更多开源请访问:开源基础软件社区https://ost.51cto.com前言在日常开发中,我们经常会遇到需要查看一些图片的情况.这时候有些用户习惯了图片放大,那么在ets中如何实现呢?今天分享的组件是通过subsampling-scale-image-view+swiper缩放视图、图像显示、手势平移缩放双击等方式实现的。官网文档地址:DeclarativedevelopmentparadigmbasedonTSextension1,DeclarativedevelopmentparadigmbasedonTSextension2。工具版本:DevEcoStudio3.0Beta2。SDK版本:3.0.0.1(API版本7Beta2)。主要功能双击放大图片。如果图片已经放大,双击可恢复原始图片大小。单击下面的缩略图列表可查看相应的图片。图片可以旋转查看,每次旋转90度。单击箭头可查看上一组缩略图视图和下一组缩略图视图。效果展示OpenHarmonynpm包OpenHarmonyjs/ts三方库使用OpenHarmonynpm包,在传统npm包的基础上,定义了OpenHarmonynpm共享包的具体工程结构和配置文件,支持OpenHarmony页面组件相关API,资源调用。通过OpenHarmonynpm包,可以实现多个模块或多个项目共享OpenHarmony页面、资源等相关代码。OpenHarmonynpm共享包的实现依赖于npm,因此需要了解和掌握npm的基本功能和机制,可以通过npm的官方文档了解。如何安装OpenHarmonynpm包和设置OpenHarmony推荐的专用npm仓库(如果使用DevEcoStudio3.0Beta3及以上版本的命令行窗口可以忽略此步骤)。npmconfigset@ohos:registry=https://repo.harmonyos.com/npm/在命令行工具中,执行如下命令进行安装,比如安装subsampling-scale-image-view三方库,依赖包会存放在node_modules目录下的项目@ohos\subsampling-scale-image-view中。npminstall@ohos/subsampling-scale-image-view--save将自动在package.json中添加以下依赖项:"dependencies":{"@ohos/subsampling-scale-image-view":"^1.0.0",}subsampling-scale-image-view组件目录结构。|----子采样尺度图像视图|----src||----主要||--------ets|||----组件#库文件夹||||----SubsamplingScaleImageView.ets#自定义组件||||----ImageViewState.ets#组件状态数据封装类说明import{SubsamplingScaleImageView}from'@ohos/subsampling-scale-image-view';...//创建模型对象@Statemodel:SubsamplingScaleImageView.Model=newSubsamplingScaleImageView.Model()//设置图片来源privateaboutToAppear(){this.model.setImage($r("app.media.apple"));}...//使用SubsamplingScaleImageView组件SubsamplingScaleImageView({model:this.model})...用于设置图片资源的主界面publicsetImage(src:string|PixelMap|Resource)publicsetImage(src:string|PixelMap|Resource,previewSource:string|Resource)publicsetImage(src:string|PixelMap|Resource,state:ImageViewState)接口使用案例//点击事件监听this.model.setSingleTapListener({onSingleTapConfirmed(event:ClickEvent){console.log("Iclickedme")}})//长按事件监听器this.model.setLongPressListener({onLongPress(event:GestureEvent){console.log("长按我");}})//双击事件监听this.model.setDoubleTapListener({onDoubleTap(event:GestureEvent){console.log("Double-clickme")}})轮播区使用Stack布局/***Stackstackcontainer,子组件按顺序入栈,后一个子组件覆盖前一个子组件*/build(){Stack({alignContent:Alignment.Bottom}){SubsamplingScaleImageView({model:this.model})Column({space:5}){Swiper(this.swiperController){Row({space:5}){Image($r('app.media.previous')).width(30).height(30).margin({top:6,left:10}).onClick((event:ClickEvent)=>{this.index=2;this.model.setImage($r('app.media.cake'));})}.width('100%').height(60).backgroundColor(0x3d3d3d)...}.index(this.index).autoPlay(false).indicator(false)//默认开启指示点.loop(true)//默认开启循环播放.duration(50).vertical(false)//默认水平切换。itemSpace(0).onChange((index:number)=>{console.log('currentsubscript'+index)...})}.height(60).backgroundColor(0x3d3d3d).align(Alignment.Bottom)}}点击旋转按钮每次将图片旋转90度($r('app.media.rotate')).width(30).height(30).margin({top:6,left:70,right:2}).onClick((event:ClickEvent)=>{this.rotate+=90;this.model.setOrientation(this.rotate)})项目源码https://gitee.com/YiRanRuMeng/open-harmony-image-view/tree/master概要该组件主要实现深度缩放视图、图片显示、手势平移缩放双击等.subsampling-scale-image-view:深度缩放视图,图像显示,手势平移缩放双重。滑动图像轮播。setOrientation设置旋转角度。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。