廢話多說,直接上代碼:
這種方法,直接去掉了标題欄,是整個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();
}
}
補充說明,第一種方法更新了手機自帶的圖庫,調用完方法可以去圖庫進行檢視。