前不久做需求遇到了这个功能,网上轮子很多,亲测有用,记录一下
//传入要保存的view
public void save(View view) {
int w = view.getWidth();
int h = view.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
view.layout(0, 0, w, h);
view.draw(c);
// 缩小图片
Matrix matrix = new Matrix();
matrix.postScale(0.5f, 0.5f); //长和宽放大缩小的比例
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
saveBitmap(bmp, format.format(new Date()) + ".JPEG");
}
private void saveBitmap(Bitmap bitmap, String bitName) {
String fileName;
File file;
if (Build.BRAND.equals("Xiaomi")) { // 小米手机
fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/" + bitName;
} else { // Meizu 、Oppo
fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/" + bitName;
}
file = new File(fileName);
if (file.exists()) {
file.delete();
}
FileOutputStream out;
try {
out = new FileOutputStream(file);
// 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在常用相册中
if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)) {
out.flush();
out.close();
// 插入图库
MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), bitName, null);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 发送广播,通知刷新图库的显示
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fileName)));
ToastUtils.showToast("保存成功");
}