写点什么

PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件

  • 2022 年 9 月 16 日
    上海
  • 本文字数:1977 字

    阅读完需:约 6 分钟

PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件

简介

PhotoView 是 OpenAtom OpenHarmony(简称“OpenHarmony”)系统的一款图片缩放及浏览的三方组件,用于声明式应用开发,支持图片缩放、平移、旋转等功能。


使用场景

PhotoView 为广大 OpenHarmony 应用开发者在处理图片时,提供了很大的便利。当开发者需要对图片进行浏览、查看等处理时,只需要导入 PhotoView 三方组件,然后调用相关的接口就能实现效果,例如基于大禹 200 开发板开发的图库应用,就使用到了 PhotoView 三方库去处理图片。


效果展示


开发环境

安装 IDE:支持 DevEco Studio 3.0 Beta3(Build Version 3.0.0.901)及以上版本。安装 SDK:支持 OpenHarmony API version 9 及以上版本


如何使用

1.下载 PhotoView 组件,在 page 页面导入

npm install @ohos/photoview --save;import {PhotoView} from '@ohos/photoview';
复制代码


2.生成 Photo View

2.1 创建 model 对象

@State data: PhotoView.Model = newPhotoView.Model();
复制代码


2.2 设置图片源

aboutToAppear() {this.data.setImageResource($rawfile('wallpaper.jpg')).setScale(1, false).setImageFit(ImageFit.Contain).setOnPhotoTapListener({onPhotoTap(x:number,y:number){}})}
复制代码


3.使用示例:平移、缩放、旋转核心思想都是通过手势触发,然后获取图片变换前后的偏移量,最后更新图片的矩阵 Matrix 实现效果。这里以平移为例说明

PinchGesture() // 平移手势接口 .onActionStart((event) => {   console.log('photo PinchGesture start:' +this.model.animate) }) .onActionUpdate((event) => { console.info("photo pin:" +JSON.stringify(event)) if (this.model.isZoom) { var currentScale: number =this.model.scale + event.scale - 1; console.log('photo PinchGesture update:'+ currentScale) if (currentScale >this.model.scaleMax) { this.model.scale = this.model.scaleMax } else if (currentScale <this.model.scaleMin) { this.model.scale = this.model.scaleMin } else { this.model.scale = currentScale;    } if (this.model.animate) { this.zoomTo(this.model.scale,this.model.mZoomDuration) } else { this.model.updateMatrix();// 通过此方法更新矩阵值 } } }) .onActionEnd((event) => { if (this.model.scale <this.model.scaleMin) { this.model.scale = this.model.scaleMin } if (this.model.scale >this.model.scaleMax) { this.model.scale = this.model.scaleMax } this.model.isZooming = (this.model.scale> 1) if (this.model.matrixChangedListener !=null) {this.model.matrixChangedListener.onMatrixChanged(this.model.rect) } if (this.model.scaleChangeListener != null){this.model.scaleChangeListener.onScaleChange(this.model.scale, 0, 0) } })
复制代码


调用 UpdateMatrix( )方法

public updateMatrix():void { this.rect.left = this.componentWidth / 2 -(this.componentWidth * this.scale) / 2 + this.offsetX; this.rect.right = this.componentWidth / 2 +(this.componentWidth * this.scale) / 2 + this.offsetX; this.rect.top = this.componentHeight / 2 -(this.sHeight / 2) * this.scale + this.offsetY; this.rect.bottom = this.componentHeight / 2 +(this.sHeight / 2) * this.scale + this.offsetY; this.matrix = Matrix4.identity() .rotate({ x: 0, y: 0, z: 1, angle:this.rotateAngle }) .translate({ x: this.offsetX, y:this.offsetY }) .scale({ x: this.scale, y: this.scale,centerX: this.centerX, centerY: this.centerY })}
复制代码


Matrix 已更新,此时给图片更新矩阵即可。

Image(this.model.src)      .alt(this.model.previewImage) .objectFit(this.model.imageFit) .transform(this.model.matrix) // 传递更新后的矩阵值 .interpolation(ImageInterpolation.Low)
复制代码


demo 源码及文件结构

下载地址https://gitee.com/openharmony-sig/PhotoView-ETS


文件目录结构如下

|---- PhotoView-ETS  |---- entry|     |---- pages  # 示例代码文件夹        |---- photoView |     |---- components  # 库文件夹|     |     |---- PhotoView.ets  #自定义组件                 |     |     |---- RectF.ets  # 区域坐标点数据封装|     |---- README.md  # 安装使用方法
复制代码


类结构


相关方法


结语

通过本篇文章介绍,您对 OpenHarmony  PhotoView 组件应该有了初步的了解。我们所有的源码和指导文档都已经开源,如果您对本篇文章内容以及所实现的 Demo 感兴趣,可以根据本篇文章介绍自行下载 OpenHarmony PhotoView 源码进行研究和使用。同时也欢迎更多开发者与我们共享开发成果,分享技术解读与经验心得。(OpenHarmony PhotoView 源码下载链接https://gitee.com/openharmony-sig/PhotoView-ETS


用户头像

OpenHarmony开发者官方账号 2021.12.15 加入

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展

评论

发布
暂无评论
PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件_Open Harmony_OpenHarmony开发者社区_InfoQ写作社区