我们在开发的时候会遇到加载巨图的需求,如何加载一个大图而不产生OOM呢,可以使用系统提供的BitmapRegionDecoder这个类。
BitmapRegionDecoder:区域解码器,可以用来解码一个矩形区域的图像,有了这个我们就可以自定义一块矩形的区域,然后根据手势来移动矩形区域的位置就能看到整张图片了。
下面就来完成一个加载大图并支持拖动查看,双击放大,手势缩放的的自定义View。
第一步,初始化变量
第二步,设置需要加载的图片
第三步,获取View的宽高,计算缩放值
第四步,绘制
第五步,分发事件
第六步,处理GestureDetector中的事件
当手指按下的时候,如果图片正在快速滑动,那么停止
onScroll()中处理滑动,根据手指移动的参数,来移动矩形绘制区域,这里需要处理各个边界点,比如左边最小就为0,右边最大为图片的宽度,不能超出边界否则就报错
onFling方法中调用滑动器Scroller的fling()方法来处理手指离开之后的惯性滑动。移动的距离在View的computeScroll()方法中计算,也需要注意边界问题,不要滑出边界