Android使用Glide加载超长图

     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去显示。

Demo GitHub地址:https://github.com/gongchaobin/GlideLargePicDemo.git

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,795评论 25 709
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,721评论 2 45
  • 运筹学教授叶荫宇:AI时代,优化算法如何应用于实际问题?http://www.iheima.com/zixun/2...
    maocy阅读 1,872评论 0 0
  • 冰辉迟暮,任岭南夏早,春寒如故。岁去重来,独对窗台坐谁诉?到底楼前燕子,争年年,宁无歧路。正思量、沈水关山,清冷望...
    李贤立阅读 3,169评论 1 1
  • 几年前曾经的朋友一起聊天的时候,说我总是什么问题都自己消化,总是遇到问题都躲起来,从来都不告诉她们我的难过,总是那...
    君蓝另一种蓝阅读 2,629评论 0 2