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

系统会提示如下异常:

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

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

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

现在问题来了,我们要在原有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去显示。

android加载长图宽度自适应,Android使用Glide加载超长图相关推荐

  1. Android开发笔记(一百七十一)使用Glide加载网络图片

    如何方便而又快速地显示网络图片,一直是安卓网络编程的热门课题,前些年图片缓存框架Picasso.Fresco等等大行其道,以至于谷歌按捺不住也开发了自己的Glide开源库.由于Android本身就是谷 ...

  2. 背景图宽度自适应及背景图合并的CSS思想

    关于宽度自适应,已经是前段开发人员必备的css技能之一,而背景图的合并则属于更高级别的要求. 我们为什么要宽度自适应,原因大体有以下几点: 第一:很多情况下有这样的需求,比如做B/S前端,90%以上要 ...

  3. 微信小程序 swiper组件轮播图宽度自适应

    swiper.wxml: 绑定bindload方法对image标签的图片显示成功时做处理 <!--pages/components/swiper/swiper.wxml--> <sw ...

  4. android 图片过长,【05-25求助】怎样无损加载一张过长的图片

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public class MainWangActivity extends Activity{ private static final String T ...

  5. android设置屏幕高度和宽度设置,Android手机的屏幕宽高度和代码设置控件的宽高度...

    1.Android手机的屏幕宽高度 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); int w ...

  6. android彩蛋长按无反应,Android TextView长按复制功能失效解决办法

    应用中使用RecyclerView列表来展现动态简介,这时候需要添加长按复制的功能来提升用户的体验.使用Android自带的功能就能满足该需求,无需自己实现,方式很简单,一句话解决: TextView ...

  7. 【Web前端】【疑难杂症】轮播图图片自适应显示问题(bootstrap3轮播图)

    关键代码 html <!-- 轮播图开始--><div id="header" class="carousel slide"><! ...

  8. Glide加载gif动画只播放一次的方法 Glide加载gif动画先显示最后一帧再开始播放动画导致闪屏的解决方案

    场景: Android App利用ViewPager制作引导页,然后利用Glide加载gif动画. 问题: 1.Glide加载gif动画如何只播放一次? 2.Glide加载gif动画,在viewPag ...

  9. 仿微信朋友圈图片浏览动画效果,大图,超长图。

    先看一下效果图,裁剪不好,最好下载apk到手机看看 1普通图,超大图. 2.超长图 1.项目使用GestureViews,如果你没有超长图(超过长度6000px就不行)就可以使用,并且支持gif动图 ...

最新文章

  1. 《The Elements of Statistical Learning》 chp3 Linear Models for Regression
  2. mysql DATE_FORMAT 年月日时分秒格式化
  3. pandas中inplace_pandas中inplace参数
  4. select * 和select 所有字段的区别
  5. textview点击展开全部或收起,内容过长显示省略号,设置行间距,字间距,跑马灯显示
  6. Navicat Premium 未保存和已执行SQL存储位置
  7. orCAD使用Orcad Capture CIS按Room摆放
  8. 将语音搜索集成到Google Now中
  9. 2020互联网岳麓峰会“软件再出发论坛”成功举办
  10. 前端保存之前输入的值_前端基础进阶(一):内存空间详细图解
  11. 深圳javascript培训:名师精品文章--JS有哪些变态语法系列
  12. prometheus实战(一) 原理介绍
  13. ps怎么对比原图快捷键_图片查看方式快捷键
  14. Windows+Nvdia显卡配置Tensorflow
  15. POJ 3097 Falling Ice 笔记
  16. 百度用AI“唤醒”历史,中国文化名片与科技名片相互成就
  17. command: robot --argumentfile
  18. c语言程序中计算圆的面积,C代码:使用概率的方法计算圆的面积
  19. 人体红外模块对比评测,是你的话怎么选
  20. 考研——史上计算机类最全辅导书推荐

热门文章

  1. Massive MIMO与MU-MIMO的区别?
  2. 计算机应用专业行业企业调研报告
  3. 什么是 Keepalived ?
  4. 小程序实现数字每三位加逗号分隔符
  5. JavaScript 数组升序降序 【超实用】
  6. 快速排序:最好,最坏以及平均复杂度推导理解
  7. 计算机组成原理指令寻址方式,计算机组成原理第四章第4讲指令和数据的寻址方式.ppt...
  8. vue移动端下拉加载分页全面解决方案
  9. 多个ai文件合并成pdf_ai导出多个单个画板的AI文件,类似PDF拆分然后能同时输出多个单PDF文件...
  10. bug生命周期的状态