巨大图片显示 Subsampling Scale Image View

适用于 Android 的自定义图像视图,专为照片画廊而设计,无需OutOfMemoryErrors即可显示巨大的图像(例如地图和建筑计划)包括捏缩放、平移、旋转和动画支持,并允许轻松扩展,因此您可以添加自己的覆盖和触摸事件检测。

该视图可选地使用二次采样和图块来支持非常大的图像 - 加载低分辨率基础层,当您放大时,它会与可见区域的较小高分辨率图块重叠。这避免了在内存中保存过多数据。它非常适合显示大图像,同时允许您放大高分辨率细节。您可以禁用较小图像的平铺以及显示位图对象时。禁用平铺有一些优点和缺点,以便决定哪个最好,请参阅wiki

演示


特征

图像显示

  • 显示来自资产、资源、文件系统或位图的图像
  • 根据 EXIF 自动旋转文件系统(例如相机或图库)中的图像
  • 以 90° 为增量手动旋转图像
  • 显示源图像的一个区域
  • 在加载大图像时使用预览图像
  • 在运行时交换图像
  • 使用自定义位图解码器

启用平铺:

  • 显示巨大的图像,大于可以加载到内存中
  • 在放大时显示高分辨率细节
  • 测试高达 20,000x20,000 像素,但较大的图像速度较慢

手势检测

  • 一指平底锅
  • 两指捏合放大
  • 快速缩放(一指缩放)
  • 缩放时平移
  • 在平移和缩放之间无缝切换
  • 平移后抛出动量
  • 双击可放大和缩小
  • 禁用平移和/或缩放手势的选项

动画片

  • 为比例和中心设置动画的公共方法
  • 可定制的持续时间和缓动
  • 可选的不间断动画

可覆盖的事件检测

  • 支持OnClickListenerOnLongClickListener
  • 支持使用GestureDetector拦截事件OnTouchListener
  • 扩展以添加您自己的手势

轻松集成

  • 在 a 内使用ViewPager以创建照片库
  • 屏幕旋转后轻松恢复比例、中心和方向
  • 可以扩展以添加随图像移动和缩放的叠加图形
  • 处理视图调整大小和wrap_content布局

快速开始

1)将此库添加为应用程序的 build.gradle 文件中的依赖项。

dependencies {
implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
}

如果您的项目使用 AndroidX,请按如下方式更改工件名称:

dependencies {
implementation 'com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0'
}

2)将视图添加到您的布局 XML。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>

3a)现在,在您的片段或活动中,设置图像资源、资产名称或文件路径。

SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);
imageView.setImage(ImageSource.resource(R.drawable.monkey));
// ... or ...
imageView.setImage(ImageSource.asset("map.png"))
// ... or ...
imageView.setImage(ImageSource.uri("/sdcard/DCIM/DSCM00123.JPG"));

3b)或者,如果您Bitmap在内存中有一个对象,请将其加载到视图中。这不适合大图像,因为它绕过了子采样 - 您可能会得到一个OutOfMemoryError.

SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);
imageView.setImage(ImageSource.bitmap(bitmap));


github地址:https://github.com/davemorrissey/subsampling-scale-image-view

下载地址:master.zip

0 个评论

要回复文章请先登录注册