之前的图片浏览器一直都是压缩过的bitmap,在显示一些长图、高清原图的时候就杯具了,全是马赛克,后来需求来了,只好借助第三方库,功夫不负有心人,找到一个不错的库,功能也齐全,效果也好,现在就推荐给大家。

该库的名字:SubsamplingScaleImageView(subsampling-scale-image-view)

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

下面我们来简单的说说怎么使用。

首先我们需要在 build.gradle 里面加入依赖:

dependencies {...
compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
    ...
}

(之前用的时候导入的版本是 3.5.0, 后来换了 3.6.0,图片处理显示的速度有了明显的提升,所以强烈推荐 3.6.0)

接着在布局 XML 里面跟普通的 imageview 一样去使用:

<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageViewandroid:id="@+id/iv_pic"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center" />

跟 imageview 不同的是在代码中的操作,先说图片的加载显示:

该库有一个类,ImageSource,调出方法,可以看到有以下几种:

ImageSource.asset(String assetName)
ImageSource.resource(int resId)
ImageSource.uri(String uri)
ImageSource.bitmap(Bitmap bitmap)
ImageSource.uri(Uri uri)

看方法名字不难理解,第一个是取 asset 目录里面的图片,第二个是取 drawable 目录里面的,第三个是通过文件路径取,第四个是通过 Uri,最后一个则是直接显示bitmap。

这里我们需要注意最后一个,官方给出这样的提示:

Or, if you have a Bitmap object in memory, load it into the view. This is unsuitable for large images because it bypasses subsampling - you may get an OutOfMemoryError.

大概意思就是说如果你通过 bitmap 的形式去加载显示图片,那么你得处理 OOM ,因为这种形式会绕过该库本身对图片的处理,所以如果我们要显示高清大图,那么请不要用最后一种。

接下来我们要把这个 ImageSource 传给 view ,下面贴出以第三种通过文件路径方式的代码:

SubsamplingScaleImageView photoView = (SubsamplingScaleImageView) view.findViewById(R.id.iv_pic);
photoView.setImage(ImageSource.uri(fileString));

很简单,这样就可以显示高清大图,同时也默认会开启缩放功能了。

这时有人问了,要是加载超过该库所能承受范围的图片呢,会不会崩掉?其实该库有对应的 OOM catch操作,超过其范围不能显示的图片只会造成图片不显示,不会造成崩溃,所以不需要再自己写 try catch 去捕获 OOM。

当然,如果你不想要缩放功能,那也可以通过 photoView.setZoomEnabled(boolean zoomEnabled) 去开启或关闭缩放功能。

接下来再说说部分可能会经常用到的其它接口:

1、回收

该库提供了回收的方法,调用也很简单:photoView.recycle()

当然也要注意,部分情况是不适合回收的,比如第二种取 drawable 目录里面的图片。对于图片浏览器模块,如果图片浏览器是可以左右滑动切换图片的话那么建议进行回收处理,至于怎么判断是不是适合回收的情况可以通过像 photoView.setContentDescription(String description) 等方法去打上标识,然后回收的时候再根据这个标识去判断是否要进行回收。

2、旋转角度

直接调用:

photoView.setOrientation(int orientation)

参数分别有:

ORIENTATION_USE_EXIF: Attempt to use the file's EXIF data to automatically rotate it. Supported for files only, not assets or resources.(根据文件的EXIF,只适用于文件)
ORIENTATION_0: Display image in its native orientation. (原始的方向)
ORIENTATION_90: Rotate the image 90° clockwise. (顺时针 90 度)
ORIENTATION_180: Rotate the image 180°.(顺时针 180 度)
ORIENTATION_270: Rotate the image 270° clockwise.(顺时针 270 度)

当然还有很多其它的接口,比如图片偏移、缩放的相关设置等,这里就不一一列举,这个得看个人需求去设置了。

另外再补充一点,该库不支持 GIF,所以如果图片浏览器要同时再处理 GIF 的话那么建议再留出一个 imageview 单独进行处理(可以利用像 Glide 之类的库)。

【Android】显示高清大图,可缩放类库 - SubsamplingScaleImageView(可用于做图片浏览器)使用说明相关推荐

  1. 洞见2021 中国企业服务年会高清大图来啦~!请查收

    嗨!还记得那个企业服务领域 每年一次的年度会议嘛! 2020年11月19日 北京香格里拉酒店新阁大宴会厅 千人规模,年度盛会 我们来啦~! 小编今天就和大家 随着大会的高清大图一起 重回大会现场 感受 ...

  2. 浅谈android中加载高清大图及图片压缩方式(二)

    这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的 ...

  3. android 点击查看大图_你是不是遇到,在花瓣网部分图片详情页,点击“放大镜”无法预览高清大图?...

    大家好,此篇文章您可以花 3 分钟学习到:如何借助率叶插件,恢复花瓣网图片详情页预览高清大图. 新品推送:这是什么神仙功能,尽然可以在Photoshop里上花瓣网.站酷.阿里图标等网站! 2020-0 ...

  4. android 高清图片,Android加载高清大图

    前两天在面试当中被问到有没有做过加载高清大图,当时确实没有做过,听面试官提到可以动态加载图片的显示区域.回来后在网上找到了一篇鸿洋大神的博文悔啊-_-!为什么早点没有看到.废话不多说代码如下: 一.B ...

  5. html 图片点击查看大图_【神游千年,大美敦煌】北魏-260窟【高清大图】

    [神游千年,大美敦煌]北魏-260窟[高清大图] --------------------------------------------------------------------------- ...

  6. 【Python爬虫实战】爬取IU高清大图

    文章目录 一.准备工作 二.具体分析 三.具体步骤 (1)将HTML文本提取出来 (2)第一步解析获得各个图集网址 (3)第二步解析获得图集中每张图片所在页面网址 (4)第三步解析获得每张图片网址 ( ...

  7. matlab中单独存图_奇怪的Matlab画图技巧系列1–保存高清大图

    毕业季马上要到了,给大家总结一些我平常用到的奇特但是好用的Matlab画图技巧 保存高清大图 很多朋友保存Matlab图片时会选择jpg保存或者截图,然后放到论文发现特别模糊尤其文字部分是进行缩放调整 ...

  8. Android_性能优化之ViewPager加载成百上千高清大图oom解决方案

    欢迎加入技术谈论群:714476794 一.背景 最近做项目需要用到选择图片上传,类似于微信.微博那样的图片选择器,ContentResolver读取本地图片资源并用RecyclerView+Glid ...

  9. 使用爬虫下载汽车之家高清大图

    好久没写爬虫,今天算是复习下Scrapy,正所谓温故而知新. 这次爬取的目标网站是汽车之家的精选高清大图. 先看看运行结果吧 页面分析 下面我们来分析一下图片精选页面 这个页面中全部都是套图,我们打开 ...

最新文章

  1. 第十章 使用机器学习的建议-机器学习老师板书-斯坦福吴恩达教授
  2. 10 个常见的 Linux 终端仿真器
  3. python实现验证码与进度条
  4. 第八章 springboot + mybatis + 多数据源
  5. coursera 《现代操作系统》 -- 第五周 同步机制(1)
  6. 手把手教你用java读写excel表格文件(POI,EasyExcel)
  7. 聊聊Top2计算机博士2021年就业选择
  8. Kali Linux 网络扫描秘籍 第三章 端口扫描(三)
  9. Spacecom:将和信威集团在30天内决定新的收购协议
  10. 为什么应尽量从列表的尾部进行元素的增加与删除操作?
  11. android 开发不容错过的网站
  12. 代数——近世代数知识点思维导图(附Visio原文件)
  13. 失意时,要耐得住寂寞
  14. openwrt 添加usb网卡_树莓派安装OpenWrt教程
  15. python抠图太模糊_【图】为什么抠图后像素变差?解决在线抠图分辨率太低的办法...
  16. 华为软件开发云如何为数字经济时代赋能?
  17. 一个不错的金蝶KIS专业版条码扫描插件
  18. c 语言中星号什么意思,Objective-C中的星号*是什么意思?
  19. python朴素贝叶斯分类器实现_用scikit-learn实现朴素贝叶斯分类器
  20. HTML转换为word,简单记录

热门文章

  1. 端口大全汇总--后续有更新会添加
  2. 面试题:如何在一千万个不重复整数(电话号码)中查找某个特定数 位运算 bitmap
  3. 没错,你看到的这张图,我用Python画出来了!
  4. 网页布局 响应式页面
  5. 前程无忧招聘信息可视化(python)
  6. JBook api 相关使用说明
  7. Service References和Web References的引用
  8. 使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法
  9. 关于虚拟现实(VR)内容开发综述
  10. 代小程序实现业务之代码管理