翻译: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 等平台使用
Function/Library | ZoomImage | Telephoto | PhotoView | Subsampling ScaleImageView |
---|---|---|---|---|
Compose | ✅ | ✅ | ❌ | ❌ |
Compose Multiplatform | ✅ | ✅ | ❌ | ❌ |
View | ✅ | ❌ | ✅ | ✅ |
旋转 | ✅ | ❌ | ✅ | ❌ |
定位 | ✅ | ❌ | ❌ | ✅ |
滚动条 | ✅ | ❌ | ❌ | ❌ |
阅读模式 | ✅ | ❌ | ❌ | ❌ |
子采样 | ✅ | ✅ | ❌ | ✅ |
子采样动画 | ✅ | ❌ | ❌ | ❌ |
单指缩放 | ✅ | ✅ | ✅ | ✅ |
动态缩放比例 | ✅ | ❌ | ❌ | ❌ |
集成图片加载器 | ✅ | ✅ | ❌ | ❌ |
丰富的交互接口 | ✅ | ❌ | ✅ | ✅ |
平台/功能 | 缩放 | 子采样 | 集成图片加载框架 |
---|---|---|---|
Android | ✅ | ✅ | ✅ |
Desktop | ✅ | ✅ | ❌ |
iOS | 🚧 | 🚧 | 🚧 |
Web | 🚧 | 🚧 | 🚧 |
已发布到 mavenCentral
根据你用的图片加载器选择
// 提供适配了 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 的支持(原文在此)
// 提供基础的 ZoomImage 组件,还需要做额外的工作以支持网络图片和子采样
implementation("io.github.panpf.zoomimage:zoomimage-compose:${LAST_VERSION}")
根据你用的图片加载器选择
// 提供适配了 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}")
ZoomImage 自己的混淆已经包含在了 aar 中,但你可能还需要为间接依赖的其它库添加混淆配置
下面以 SketchZoomAsyncImage
为例,其它组件以及详细用法请查看文档 开始使用
SketchZoomAsyncImage(
imageUri = "http://sample.com/sample.jpg",
contentDescription = "view image",
modifier = Modifier.fillMaxSize(),
)
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,
)
下面以 SketchZoomImageView
为例,其它组件以及详细用法请查看文档 开始使用
val sketchZoomImageView = SketchZoomImageView(context)
sketchZoomImageView.displayImage("http://sample.com/sample.jpg")
- 开始使用
- Scale: 缩放、双击缩放、时长设置
- Offset: 移动到指定位置
- Locate: 定位到图片的任意位置并保持在屏幕中央
- Rotate: 旋转图片
- Read Mode: 长图初始时充满屏幕,方便阅读
- Click: 接收点击事件
- Subsampling: 对超大图进行子采样显示,避免 OOM
- Scroll Bar: 显示水平和垂直滚动条,明确当前滚动位置
- Log: 修改日志等级以及输出管道
- Compose Multiplatform: 在桌面平台使用
你可以在 sample-android 和 sample-desktop 模块中找到示例代码,也可以到 release 页面下载 APK、MSI、DMG、DEB 包体验
请查看 CHANGELOG 文件
以下是我的其它开源项目,感兴趣的可以了解一下:
- sketch:Android 上的一个强大且全面的图片加载器,完全基于协程,还支持 GIF、视频缩略图以及 Compose
- assembly-adapter:Android 上的一个为各种 Adapter 提供多类型 Item 实现的库。还顺带为 RecyclerView 提供了最强大的 divider。
- sticky-item-decoration:RecyclerView 黏性 item 实现
Apache 2.0. 有关详细信息,请参阅 LICENSE 文件.