费了好大劲写玩才发现早就有现成的三方(glide)了,还是记下来吧。
为什么优化?因为图片大了很容易超出内存导致崩溃。
原理很简单,压缩图片,保存。
工具类。
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ThumbnailUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by Administrator on 2017/4/1.
*/
public class SaveThumbUtils {
//这个thumbpath是工作目录,
public static void saveThumb(String imagePath,String workPath){
int width=100;//缩略图的宽
int height=100;//缩略图的高
Bitmap bitmap = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
// 获取这个图片的宽和高,注意此处的bitmap为null
bitmap = BitmapFactory.decodeFile(imagePath, options);
options.inJustDecodeBounds = false; // 设为 false
// 计算缩放比
int h = options.outHeight;
int w = options.outWidth;
int beWidth = w / width;
int beHeight = h / height;
int be = 1;
if (beWidth < beHeight) {
be = beWidth;
} else {
be = beHeight;
}
if (be <= 0) {
be = 1;
}
options.inSampleSize = be;
// 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false
bitmap = BitmapFactory.decodeFile(imagePath, options);
// 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
File f = new File(workPath+"/thumb/"+imagePath.replace("/","").replace(".",""));
if (f.exists()) {
f.delete();
}
try {
FileOutputStream out = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
然后oncreate加载时。
try {
final ImageView oldImage = imgDrawShow;
final String tfilepath = filepath;
File tFile = new File(sd + "/thumb/" + filepath.replace("/", "").replace(".", ""));
if (!tFile.exists()) {
new Thread() {
public void run() {
SaveThumbUtils.saveThumb(tfilepath, sd);
runOnUiThread(new Runnable() {
@Override
public void run() {
final Bitmap bm = BitmapFactory.decodeFile(sd + "/thumb/" + tfilepath.replace("/", "").replace(".", ""));
oldImage.setImageBitmap(bm);
}
});
}
}.start();
}
else {
Bitmap bm = BitmapFactory.decodeFile(sd + "/thumb/" + filepath.replace("/", "").replace(".", ""));
imgDrawShow.setImageBitmap(bm);
}
}catch (Exception e){}
新增时。
new Thread() {
public void run() {
SaveThumbUtils.saveThumb(filePath,sd);
runOnUiThread(new Runnable(){
@Override
public void run() {
try {
Bitmap bm = BitmapFactory.decodeFile(sd+"/thumb/"+filePath.replace("/","").replace(".",""));
imgDrawShow.setImageBitmap(bm);
}catch (Exception e){
}
}
});
}
}.start();