一、目标
实现超大图片的查看功能。
- 《金刚经 右街僧 录准公》26800 x 640(32.7M)
- 《金刚经 王玠》15404 x 950(27.9M)
- 《溪山清远图》17008 x 720 (23.4M)
二、体验地址
神马笔记最新版本:【神马笔记Version1.1.0_beta.apk】
三、准备工作
1. 加载超大图片
2018年12月17日,华为在长沙召开新品发布会,正式发布旗下nova系列新机华为nova 4,主打极点全面屏及4800万超高像素拍照体验。
以RGB_565图片格式计算4800万像素占用内存大小。
2 x 48 x 1000 x 1000 / 1024 / 1024 ≈ 91.55M
如果直接加载完整的图片,大概需要占用91.55M内存空间,对于当下内存配置都是6G起步的手机,占用内容不算大,但Android为每个应用分配的内存是有限的,一次性加载如此大的图片,非常容易导致应用OOM崩溃。
因此必须使用加载部分区域的方式来加载图片。
Android提供了BitmapRegionDecoder
来实现这个功能。
2. 获取图片大小
通过BitmapFactory.Options
的inJustDecodeBounds
可以不加载图片而获取图片大小。
此外,还需要考虑Exif信息,处理图片旋转或者翻转属性。
Android提供了ExifInterface
处理Exif信息。
3. 用户交互
- 双击缩放图片
- 双指缩放图片
- 移动图片
- ……
四、subsampling-scale-image-view
subsampling-scale-image-view完美解决以上所有问题。
GitHub项目地址:https://github.com/davemorrissey/subsampling-scale-image-view
WIKI帮助手册:https://github.com/davemorrissey/subsampling-scale-image-view/wiki
五、Final
确定目标需求,到GitHub上寻找成品与半成品代码可以有效得提供开发效率。
待神马笔记功能逐渐稳定后,会继续开源相关代码。
访问已开源的代码可以访问 https://github.com/jicanghai37927/WhatsAndroid 。
这个项目为神马笔记的原型项目。