Skip to content

Latest commit

 

History

History
215 lines (153 loc) · 9.45 KB

README_zh.md

File metadata and controls

215 lines (153 loc) · 9.45 KB

logo_image ZoomImage

Platform Platform2 API License version_icon

翻译:English

用于缩放图像的库,支持 Android View、Compose 以及 Compose Multiplatform;支持双击缩放、单指或双指手势缩放、单指拖动、惯性滑动、定位、旋转、超大图子采样等功能。

example.mp4

特点

  • 功能齐全. 支持双击缩放、手势缩放、单指拖动、惯性滑动等基础功能
  • 定位. 支持定位到图片的任意位置并保持在屏幕中央
  • 旋转. 支持 0°, 90°, 180°, 270°, 360° 旋转图片
  • 子采样. 支持对超大图进行子采样显示,避免 OOM,碎片支持动画以及清晰度渐变
  • 动态缩放比例. 根据图片尺寸和容器尺寸自动计算出最合适的双击缩放比例
  • 缩放阻尼. 手动缩放超过最大或最小缩放比例后会有带阻尼感的橡皮筋效果
  • 单指缩放. 双击并按住屏幕上下滑动可缩放图像
  • 滚动条. 支持显示水平和垂直滚动条,明确当前滚动位置
  • 阅读模式. 阅读模式下显示长图时初始状态会自动充满屏幕,用户可立即开始阅读图片内容,省去用户双击放大的操作
  • Exif. 支持读取 Exif Orientation 信息并自动旋转图片
  • 图片加载器. 提供对 sketch、coil、glide、picasso 等图片加载器的支持,也可以自定义支持更多图片加载器
  • Compose Multiplatform. 支持 Compose Multiplatform,可在 Android、macOS、Windows、Linux 等平台使用

Comparison of similar libraries/同类库对比

Function/Library ZoomImage Telephoto PhotoView Subsampling
ScaleImageView
Compose
Compose Multiplatform
View
旋转
定位
滚动条
阅读模式
子采样
子采样动画
单指缩放
动态缩放比例
集成图片加载器
丰富的交互接口

多平台支持

平台/功能 缩放 子采样 集成图片加载框架
Android
Desktop
iOS 🚧 🚧 🚧
Web 🚧 🚧 🚧

导入

已发布到 mavenCentral

${LAST_VERSION}: Download (不包含 'v')

compose android

根据你用的图片加载器选择

// 提供适配了 Sketch 图片加载器的 SketchZoomAsyncImage 组件,用法简单(推荐使用)
implementation("io.github.panpf.zoomimage:zoomimage-compose-sketch:${LAST_VERSION}")

// 提供适配了 Coil 图片加载器的 CoilZoomAsyncImage 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-compose-coil:${LAST_VERSION}")

// 提供适配了 Glide 图片加载器的 GlideZoomAsyncImage 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-compose-glide:${LAST_VERSION}")

为什么没有 picasso 版本的 compose ZoomImage 组件?因为 Picasso 官方已经说明不会提供对 compose 的支持(原文在此

compose multiplatform

// 提供基础的 ZoomImage 组件,还需要做额外的工作以支持网络图片和子采样
implementation("io.github.panpf.zoomimage:zoomimage-compose:${LAST_VERSION}")

view

根据你用的图片加载器选择

// 提供适配了 Sketch 图片加载器的 SketchZoomImageView 组件,用法简单(推荐使用)
implementation("io.github.panpf.zoomimage:zoomimage-view-sketch:${LAST_VERSION}")

// 提供适配了 Coil 图片加载器的 CoilZoomImageView 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-view-coil:${LAST_VERSION}")

// 提供适配了 Glide 图片加载器的 GlideZoomImageView 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-view-glide:${LAST_VERSION}")

// 提供适配了 Picasso 图片加载器的 PicassoZoomImageView 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-view-picasso:${LAST_VERSION}")

// 提供最基础的 ZoomImageView 组件,还需要做额外的工作以支持网络图片和子采样
implementation("io.github.panpf.zoomimage:zoomimage-view:${LAST_VERSION}")

R8 / Proguard

ZoomImage 自己的混淆已经包含在了 aar 中,但你可能还需要为间接依赖的其它库添加混淆配置

快速上手

compose android

下面以 SketchZoomAsyncImage 为例,其它组件以及详细用法请查看文档 开始使用

SketchZoomAsyncImage(
    imageUri = "http://sample.com/sample.jpg",
    contentDescription = "view image",
    modifier = Modifier.fillMaxSize(),
)

compose multiplatform

val state: ZoomState by rememberZoomState()
LaunchedEffect(Unit) {
    state.subsampling.setImageSource(ImageSource.fromResource("huge_image.jpeg"))
}
ZoomImage(
    painter = painterResource("huge_image_thumbnail.jpeg"),
    contentDescription = "view image",
    modifier = Modifier.fillMaxSize(),
    state = state,
)

view

下面以 SketchZoomImageView 为例,其它组件以及详细用法请查看文档 开始使用

val sketchZoomImageView = SketchZoomImageView(context)
sketchZoomImageView.displayImage("http://sample.com/sample.jpg")

文档

示例

你可以在 sample-androidsample-desktop 模块中找到示例代码,也可以到 release 页面下载 APK、MSI、DMG、DEB 包体验

更新日志

请查看 CHANGELOG 文件

我的项目

以下是我的其它开源项目,感兴趣的可以了解一下:

  • sketch:Android 上的一个强大且全面的图片加载器,完全基于协程,还支持 GIF、视频缩略图以及 Compose
  • assembly-adapter:Android 上的一个为各种 Adapter 提供多类型 Item 实现的库。还顺带为 RecyclerView 提供了最强大的 divider。
  • sticky-item-decoration:RecyclerView 黏性 item 实现

License

Apache 2.0. 有关详细信息,请参阅 LICENSE 文件.