今天写一下保存图片到手机相册的功能!
整个保存图片的代码如下:
public void saveImageToGallery(Context context, Bitmap bmp) {
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return;
}
// 首先保存图片
File appDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsoluteFile();
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".png";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
} catch (IOException e) {
e.printStackTrace();
return;
}
try {
MediaStore.Images.Media.insertImage(context.getContentResolver(),
file.getAbsolutePath(), fileName, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.getAbsolutePath())));
}
长按图片的事件
imgView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
saveImageToGallery(MainActivity.this, bitmap);
return true;//true代表消费了该事件,不在往下传递,如果返回false,会触发onclicklistener时间
}
});
特别注意这点:调用getDrawingCache()前先要测量,否则的话得到的bitmap为null,也就是保存到相册里图片会变黑的问题
imgView = findViewById(R.id.icon);
imgView.setDrawingCacheEnabled(true);
imgView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
imgView.layout(0, 0, imgView.getMeasuredWidth(), imgView.getMeasuredHeight());
bitmap = Bitmap.createBitmap(imgView.getDrawingCache());
imgView.setDrawingCacheEnabled(false);