本篇要实现的是点击一个按钮,弹出一个自定义dialog,上面放有一张图片,点击保存后,该图片将被保存到指定的文件夹中。
主界面的布局就放一个button即可。
先来看dialog的代码
private void dialog(){
//先new出一个监听器,设置好监听
DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case Dialog.BUTTON_POSITIVE:
Toast.makeText(MainActivity.this, "确认").show();
Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.a);
saveImageToGallery(MainActivity.this,rawBitmap);
break;
case Dialog.BUTTON_NEGATIVE:
Toast.makeText(MainActivity.this, "取消").show();
break;
}
}
};
//dialog参数设置
final ImageView img = new ImageView(this);
img.setImageResource(R.mipmap.a);
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
builder.setTitle(" "); //设置标题
builder.setView(img);
// builder.setMessage("是否确认退出?"); //设置内容
// builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
builder.setPositiveButton("保存",dialogOnclicListener);
builder.setNegativeButton("取消", dialogOnclicListener);
builder.create().show();
}
上面这段代码直接调用即可
saveImageToGallery(Context context,Bitmap bitmap)就用来存储图片,注意这里的图片一定要是bitmap格式。
public static void saveImageToGallery(Context context, Bitmap bmp) {
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory(), "test");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
Toast.makeText(context,"文件已保存到"+Environment.getExternalStorageDirectory()+"/test",Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 其次把文件插入到系统图库
// 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.fromFile(file)));
}
上段代码中被注释的部分,经检验,图片会被单独放在命名为picture的文件夹里面,所以这里不需要,可以注释掉。
注意注意!!还要加上权限!!
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
所有的步骤就是这样,只需要一个方法即可
效果图如下