登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 323|回复: 0

Android使用Glide加载超长图

[复制链接]

261

主题

261

帖子

2873

安币

手工艺人

发表于 2019-1-28 10:25:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-864937-79455.html

app项目开发过程中,大都有查看图片详情的功能模块。实现的方式一般都是通过viewpager photoView Glide的方式。这种方式下,如果碰到加载超长图,比如说高清版的清明上河图/世界地图,肯定就加载不出来了。


系统会提示如下异常:






log的意思就是图片太大了。这个时候BitmapRegionDecoder就派上了用场了。




android开发文档的解释是BitmapRegionDecoder允许从图片扣取一个图块加载,这就能很好的加载高清长图也能有效的防止内存溢出了。


SubsamplingScaleImageView就是基于BitmapRegionDecoder封装的开源框架。


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


现在问题来了,我们要在原有viewpager photoView Glide的基础上加上SubsamplingScaleImageView。photoView Glide的方式能加载普通图和GIF图,SubsamplingScaleImageView是基于BitmapRegionDecoder,不能加载GIF图。(如果需要加载超大/帧数比较多的GIF,需要另找算法处理)
   
关键代码如下:
1.根据图片url后缀判断图片是否GIF图,如果是GIF图,执行GIF图的加载策略;
2.普通图片先通过Glide加载得到Bitmap的宽/高,如果高度超过了定义的MaxSize或者宽高比超过了MaxScale,就认为是超长图,需要通过SubsamplingScaleImageView去显示。为了使超长图平铺满屏幕的宽度从(0,0)点开始显示,我们需要计算zoom的scale的size。


计算方式如下:



3.普通非超长图 就简单了直接通过photoView去显示。



  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-864937-79455.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表