{"repo":"iielse/imageviewer","free":true,"listed":false,"github":"https://github.com/iielse/imageviewer","clone":"git clone https://github.com/iielse/imageviewer.git","description":"A simple and customizable Android full-screen image viewer 一个简单且可自定义的Android全屏图像浏览器","language":"Kotlin","stars":2301,"topics":["viewer","imageviewer","photobrowser","gallery","zoom","wechat","viewpager","gif","image","video"],"license":"MIT","category":"media-processing","readme_excerpt":"ImageViewer 一个面向 Android 的图片/视频预览库，支持从缩略图到原图的平滑过渡动画，并兼容普通图、长图、GIF、视频和分页数据源。 特性 - 缩略图到大图的无缝过渡动画 - 普通图缩放、拖拽浏览 - 长图分块加载 - 视频预览与播放控制 - 下拉/上滑拖拽关闭 - 分页数据加载 - 预览数据删除 - 预览页 UI 自定义扩展 - RTL 适配 效果图 引入 JitPack: 运行环境 - minSdk 23 - compileSdk 36 - Java 17 快速开始 最简单的调用方式： ImageLoader 示例 普通图使用 Glide，长图先下载到本地文件再交给 SubsamplingScaleImageView ： 说明： - subsamplingDownloadRequest() 现在是协程挂起函数，不再依赖 RxJava。 - 长图下载逻辑建议绑定生命周期，避免页面销毁后继续回调 UI。 Transformer 示例 Transformer 用于把缩略图和预览页建立“配对关系”，决定过渡动画的起点和终点。 到这里，基础接入已经完成。 进阶使用 你可以在 builder 上追加 3 类自定义能力： - 自定义每一页上的 UI 例如：更多信息、保存、分享、操作按钮 builder.setVHCustomizer(MyCustomViewHolderUI()) - 自定义覆盖层 UI 例如：指示器、顶部栏、底部工具栏 builder.setOverlayCustomizer(MyCustomIndicatorUI()) - 监听预览状态变化 例如：翻页、拖拽、过渡动画、视频播放状态 builder.setViewerCallback(MyViewerStateChangedListener()) ViewerCallback 参数配置 一般情况下不需要调整，但以下参数可按业务需要覆盖： 属性 说明 --- --- OFFSCREEN PAGE LIMIT Viewer 预加载页数 VIEWER ORIENTATION Viewer 滑动方向 VIEWER BACKGROUND COLOR 预览背景色 DURATION TRANSITION 过渡动画时长 DURATION BG 背景动画时长 SWIPE DISMISS 是否支持拖拽关闭 SWIPE TOUCH SLOP 拖拽触摸阈值 DISMISS FRACTION 拖拽关闭判定阈值 TRANSITION OFFSET Y 透明状态栏场景下的过渡位置修正 数据源定义 说明： - id() 必须唯一，用于分页定位和过渡动画映射。 - itemType() 决定当前数据是普通图、长图还是视频。 FAQ 如何手动关闭预览页？ 通过： 获取 viewer 的动作控制器后，可以调用： - setCurrentItem(pos: Int) 切换到指定位置 - dismiss() 关闭预览 - remove(item: List ) 删除指定元素 如何展示视频？ 可直接参考 demo 中的实现： - SimpleViewerCustomizer - SimpleImageLoader - ExoVideoView 为什么没有过渡动画？ 通常是 Transformer 配置不正确。要保证： - getView() 能返回当前缩略图对应的 ImageView - 缩略图与预览页使用相同的 photoId 为什么过渡动画和原图位置有偏差？ 注意状态栏/沉浸式布局的影响，必要时调整： Dem","default_branch":null,"files":null,"tree":[],"storefront":"/r/iielse","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/iielse/imageviewer/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}