一开始没打算分析 SubsamplingScaleImageView 这个开源的图片浏览器的,因为这个库在我们 App 中使用了,觉得自己对这个库还是比较熟悉的,结果某天再看看到源码介绍的时候,才发现自己对其了解并不够深入,所以这才打算再细细看看源码的实现,同时记录方便以后回顾。

那么 SubsamplingScaleImageView 有啥优点呢?

  1. 采用 GestureDetector 进行手势控制,支持图片的点击,双击,滑动等来控制的放大缩小;

  2. 使用了 BitmapRegionDecoder,具有分块加载功能;

  3. 支持查看长图,超大图

上面的优点简直就是非常实用,基本上拿来就可以直接用,简单省力。

下面就是要来分析,它是如何满足这些优点的。

源码分析

首先附上源码地址:subsampling-scale-image-view

使用说明

如果可以拿到图片的资源id,assert或者文件路径,直接使用下面方式进行使用:

SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);
imageView.setImage(ImageSource.resource(R.drawable.monkey));
// ... or ...
imageView.setImage(ImageSource.asset("map.png"))
// ... or ...
imageView.setImage(ImageSource.uri("/sdcard/DCIM/DSCM00123.JPG"));
11-29 06:59