在之前那篇里面仍有不足之处,比如:
一张4000*3000的图片压缩到了300*200的大小,然后输出到ImageView上。但是ImageView的大小可能只有100*100,这样我们仍然占用了很多不需要的内存。所以我们只需要将图片居中裁剪成ImageView的大小即可。
知道了如何做之后,在考虑一下可能存在的图片尺寸与ImageView尺寸之间的关系:
1.图片的宽 小于 ImageView的宽 (比如:5000*10)
2.图片的高 小于 ImageView的高 (比如:10*5000)
3.图片的宽和高都 小于 ImageView的宽高 (比如:1*1)
考虑好了之后,我们就能动手写代码了!
先来个大合照,然后我在把裁剪的方法一一拿出来说吧 = n =
/*
获取图片缩略图任务
*/
private class GenerateImageThumbnail implements Callable<String>{
private int scaleTimes; //缩放倍数
private String path; //图片路径
private String tag; //图片加载任务唯一TAG
private ImageView imageView; //图片接收的ImageView
private Bitmap bitmap; //图片的Bitmap对象
private HandleOnLoaded handleOnLoaded; //图片效果处理回调
public GenerateImageThumbnail(String path, String tag, ImageView imageView, HandleOnLoaded handleOnLoaded) {
this.path = path;
this.tag = tag;
this.imageView = imageView;
this.handleOnLoaded = handleOnLoaded;
}
@Override
public String call() throws Exception {
try {
//进行图片剪裁
bitmap = cropBitmap();
} catch (IllegalArgumentException e) {
//如果裁剪出现了异常
fetherExecutor.removeTag(tag);
Log.d("OCImageLoader", "Exception on croping bitmap. "+e);
runOnUIThread(new Runnable() {
@Override
public void run() {
onError();
}
});
return null;
}