android 大图分块加载,超大图加载
超大图加载
一个1000 x 20000(宽1000px,高20000px)的大图,如何正常加载显示且不发生OOM ?
分析
当图片超出设备内存大小时,就会导致OOM。但是这么多漂亮的小姐姐,怎么能不加载出来呢?既然一次加载内存不够,我们就一次加载一部分,分区域去加载。
对于这种常见问题,Android已经提供了一些支持:BitmapRegionDecoder,图片区域加载类,帮助我们完成区域加载。
分区域加载。既然是区域加载,就要能传入一个区域去加载该部分图片。
手势滑动监听。图片这么大,当然要提供一种方式去移动显示的区域。使用手势滑动,滑到哪一块显示那一块。
自定义View。系统控件可定不满足需求。我们必须使用自定义View的知识。
实现
分区域加载
BitmapRegionDecoder.decodeRegion(mRect, mOptions)
使用decodeRegion()方法加载mRect内图片大小。
手势滑动监听
使用MoveGestureDetector,具体处理手势事件。
在滑动时,不断的更新滑动事件Event。
自定义View
覆写onTouchEvent()
在此方法中监听手势事件,记得边界处理。
覆写onMeasure()
获取到控件的大小,结合图片的大小,计算出要显示的区域存储到Rect中,在绘制时就利用此Rect去绘制。
覆写onDraw()
利用分区域加载的方法,拿到当前显示区域的Bitmap,使用canvas绘制到界面上。
效果
大图加载
后记
参考资料
待优化
每次滑动都会onDraw();
可以增加手势缩放;
android 大图分块加载,超大图加载相关推荐
- android高德地图瓦片,高德地图加载瓦片分析
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? ##了解瓦片地图 瓦片地图:瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的 ...
- 【Android 内存优化】Bitmap 长图加载 ( BitmapRegionDecoder 简介 | BitmapRegionDecoder 使用流程 | 区域解码加载示例 )
文章目录 一.BitmapRegionDecoder 简介 二.图片信息 三.BitmapRegionDecoder 对象创建 四.解码图像 五.图像区域解码示例 六.源码及资源下载 一.Bitmap ...
- android 大图 分块,android 大文件分割上传(分块上传)
由于android自身的原因,对大文件(如视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务. //文件分割上传 p ...
- Android 长图大图加载
长图大图加载 文章目录 长图大图加载 1.长图加载 1.1画出图形 1.2滑动图形 1.3惯性滑动图形 1.4 长图加载所有代码,以及展示 2.大图加载 3.大图缩放 需求:在项目开发中需要长图显示以 ...
- android 展示大图,Android 加载超大图(原图)分析
众所周知,Android的ImageView不支持加载大图(高分辨率),会直接报错,如果不是特别大的图片,也可以选择使用WebView来加载,并且直接可以实现手势方法缩小平移等效果,但是如果图片特别长 ...
- Android 加载超大长图及原理
Android 加载超大长图及原理 我们在开发中偶尔会遇到加载超大长图,类似于微信n多页聊天记录截图加载.但这类图片一般都会很大,几兆.十几兆.甚至几十兆,很容易造成内存溢出,今天笔者给大家提供一个可 ...
- Android 高清加载长图或大图方案
不过值得一提的是:上面这个手势检测的写法,不是我想的,而是一个开源的项目https://github.com/rharter/android-gesture-detectors,里面包含很多的手势检测 ...
- Android 大图加载显示
Android 大图加载显示 文章目录 Android 大图加载显示 通过本文你能学到什么? 一.ImagerView直接放置一张几十M的图片会崩溃吗? 二.如何保证加载大图不发生崩溃? 三.Glid ...
- Android 高清加载巨图方案 拒绝压缩图片
Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自: ...
最新文章
- ThinkPHP如何判断一个更新操作是否成功
- 安卓手机管理器_@你,请查收这款最强的安卓文件管理器
- Java HashMap的死循环
- Java 截取反斜杠--java使用split拆分特殊字符
- 操作系统 系统开销比率_操作系统中的最高响应比率下一个(HRRN)调度
- 基于PHP实现一个简单的在线聊天功能(轮询ajax )
- client mysql 逗号_Mysql-Client编码问题
- [原创]jQuery插件Realtime-Modifier正式发布!
- java数组转为字符串_join()和toString()方法 将数组转换为字符串
- 在vue 中使用Stylus
- EA(Enterprise Architecture,企业架构)
- JS 简易控制台插件 [供 博客, 论坛 运行js用]
- Python爬取网页数据
- 勒让德函数C语言编程设计,用递归方法求n阶勒让德多项式的值
- PDF文件怎么旋转页面
- [Zookeeper] 安装and各 配置参数详解
- 批量修改文件夹下所有文件的名称
- java仿QQ聊天室群聊(快速写一个简易QQ)
- 广告点击率预测问题初探
- 云原生分布式操作系统营造法式-云平台提供商视角