废话多说,直接上代码:
这种方法,直接去掉了标题栏,是整个activity的图像。
在AndroidManifest.xml里先增加读写权限,版本高的话另外在代码里去请求
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
获取当前屏幕截图,并返回bitmap:
public static Bitmap activityShot(Activity activity) { /*获取windows中最顶层的view*/ View view = activity.getWindow().getDecorView(); //允许当前窗口保存缓存信息 view.setDrawingCacheEnabled(true); view.buildDrawingCache(); //获取状态栏高度 Rect rect = new Rect(); view.getWindowVisibleDisplayFrame(rect); int statusBarHeight = rect.top; WindowManager windowManager = activity.getWindowManager(); //获取屏幕宽和高 DisplayMetrics outMetrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(outMetrics); int width = outMetrics.widthPixels; int height = outMetrics.heightPixels; //去掉状态栏 Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width, height - statusBarHeight); //销毁缓存信息 view.destroyDrawingCache(); view.setDrawingCacheEnabled(false); return bitmap; }
然后根据上面方法返回的bitmap,保存到本地文件夹,提供了两种方法。
1.
public void saveBitmap(Bitmap bitmap) { // 首先保存图片 File appDir = new File(Environment.getExternalStorageDirectory(), "image"); if (!appDir.exists()) { appDir.mkdir(); } String fileName = "image" + ".png"; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } // 把文件插入到系统图库 try { MediaStore.Images.Media.insertImage(this.getContentResolver(), file.getAbsolutePath(), fileName, null); } catch (FileNotFoundException e) { e.printStackTrace(); } // 通知图库更新 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + "/sdcard/namecard/"))); }
2.
public static final String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/abc/pics"; public static void saveBitmapToLocal(String fileName, Bitmap bitmap) { try { // 创建文件流,指向该路径,文件名叫做fileName File file = new File(FILE_PATH, fileName+".png"); // file其实是图片,它的父级File是文件夹,判断一下文件夹是否存在,如果不存在,创建文件夹 File fileParent = file.getParentFile(); if (!fileParent.exists()) { // 文件夹不存在 fileParent.mkdirs();// 创建文件夹 } // 将图片保存到本地 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(file)); } catch (Exception e) { e.printStackTrace(); } }
补充说明,第一种方法更新了手机自带的图库,调用完方法可以去图库进行查看。