subsampling-scale-image-view源码研究

前言

代码仓库地址

在Android平台,用户再查看图片的时候,都有放大缩小图片的需求,放大的主要目的是观察图片的细节。Android提供了ImageView作为展示图片的官方控件,很遗憾,ImageView无法实现这个效果,有人说了,可以通过Matrix矩阵来实现啊,确实通过Matrix可以实现图片的放大或者缩小,但是ImageView完全加载一张大图片的内存代价是惊人的,这种实现方式很容易爆掉内存,最好的做法就是只加载屏幕显示的那部分内容,用户看什么就显示什么,类似于百度地图。

有没有现成的库可以使用呢?github上还真有很多实现了这个功能的库,个人认为SubSamplingScaleImageView是其中最简单,最好用的一个类库了。作者还在持续改进,重构代码,使之更加好用。

要点

  • 实现View,重写measure,layout,draw过程
  • 将整个Bitmap分割成很多方块
  • 使用BitmapRegionDecoder来区间加载这些小的Bitmap,铺满整个屏幕
  • 以屏幕的左上角为原点,用户移动的时候,控制图片的Translate,映射Bitmap内容到屏幕上去

目录

  • UI实现

  • 加载图片细节的实现逻辑

  • 实现首先显示缩略图,然后加载原图

  • 实现多指放大,动态的加载原图

  • 图片超过屏幕大小的时候,移动图片

posted @ 2015-04-15 19:17  AndroidGrass  阅读(1758)  评论(0编辑  收藏  举报