最近做一个需求,就是把点击一个商品,弹出一个dialog,然后点击保存,把这个dialog保存到相册,一开始了解这个需求,当时想的就是调用系统的截屏,但是考虑到截屏了那多出来的部分不是还得去手动裁剪,天呀,想想都觉得可怕,但是换个角度想想,把view转换成bitmap然后保存貌似也可行,百度知google有缓存view的操作,利用api: setDrawingCacheEnabled(true)和buildDrawingCache()创建缓存;再使用view.getDrawingCache()即可将当前的view转换成bitmap,剩下就是利用流去进行一定的写入即可,ok,贴代码:
写入sd卡并通知图库刷新的操作:
//保存图片
public static void saveImageToGallery(Context mContext, Bitmap bitmap) {
//注意小米手机必须这样获得public绝对路径
File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsoluteFile();
//保存图片的文件夹名
String fileName = "";
File appDir = new File(file, fileName);
if (!appDir.exists()) {
appDir.mkdirs();
}
fileName = System.currentTimeMillis() + ".jpg";
currentFile = new File(appDir, fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(currentFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null)
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 最后通知图库更新
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(currentFile.getPath()))));}