subsampling-scale-image-view源码研究
前言
在Android平台,用户再查看图片的时候,都有放大缩小图片的需求,放大的主要目的是观察图片的细节。Android提供了ImageView作为展示图片的官方控件,很遗憾,ImageView无法实现这个效果,有人说了,可以通过Matrix矩阵来实现啊,确实通过Matrix可以实现图片的放大或者缩小,但是ImageView完全加载一张大图片的内存代价是惊人的,这种实现方式很容易爆掉内存,最好的做法就是只加载屏幕显示的那部分内容,用户看什么就显示什么,类似于百度地图。
有没有现成的库可以使用呢?github上还真有很多实现了这个功能的库,个人认为SubSamplingScaleImageView是其中最简单,最好用的一个类库了。作者还在持续改进,重构代码,使之更加好用。
要点
- 实现View,重写measure,layout,draw过程
- 将整个Bitmap分割成很多方块
- 使用BitmapRegionDecoder来区间加载这些小的Bitmap,铺满整个屏幕
- 以屏幕的左上角为原点,用户移动的时候,控制图片的Translate,映射Bitmap内容到屏幕上去
目录
-
UI实现
-
加载图片细节的实现逻辑
-
实现首先显示缩略图,然后加载原图
-
实现多指放大,动态的加载原图
-
图片超过屏幕大小的时候,移动图片