View.getDrawingCache()public Bitmap captureActivity(Activity activity) {
View decorView = activity.getWindow().getDecorView(); // 根視圖
decorView.setDrawingCacheEnabled(true);
decorView.buildDrawingCache(); // 強制構建快取
Bitmap bitmap = decorView.getDrawingCache();
if (bitmap != null) {
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false); // 複製一份,避免快取銷毀後失效
}
decorView.destroyDrawingCache(); // 釋放快取
decorView.setDrawingCacheEnabled(false);
return bitmap;
}
public void saveToGallery(Context context, Bitmap bitmap, String fileName) {
MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, fileName, "截圖");
// Android 10+ 建議使用 MediaStore 插入 API
}
<application android:hardwareAccelerated="false"> 或對該 View setLayerType(LAYER_TYPE_SOFTWARE, null)。ScrollView/RecyclerView,或使用 PixelCopy (API 26+)。WRITE_EXTERNAL_STORAGE。Android 14+ 推薦 MediaProjection 系統級截圖/錄屏 API,無需處理 View 層級細節,支援跨應用、安全性更高。