**
截屏并保存图片功能
**
首先,重点Utils:
ScreenUtils.Java
package xcylwebview.utils;import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.util.DisplayMetrics;
import android.view.View;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;/*** @ClassName ScreenUtils* @Description TODO* @Author DoLin。* @Date 2022/1/10 18:06* @Version 1.0*/
public class ScreenUtils {/*** 保存图片到文件File。** @param src 源图片* @param file 要保存到的文件* @param format 格式* @param recycle 是否回收* @return true 成功 false 失败*/public static boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle) {if (isEmptyBitmap(src))return false;OutputStream os;boolean ret = false;try {os = new BufferedOutputStream(new FileOutputStream(file));ret = src.compress(format, 100, os);if (recycle && !src.isRecycled())src.recycle();} catch (IOException e) {e.printStackTrace();}return ret;}/*** 获取当前屏幕截图,不包含状态栏(Status Bar)。** @param activity activity* @return Bitmap*/public static Bitmap screenShot(Activity activity,View view) {
// View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bmp = view.getDrawingCache();int statusBarHeight = getStatusBarHeight(activity);int width = (int) getDeviceDisplaySize(activity)[0];int height = (int) getDeviceDisplaySize(activity)[1];Bitmap ret = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight);view.destroyDrawingCache();return ret;}public static float[] getDeviceDisplaySize(Context context) {Resources resources = context.getResources();DisplayMetrics dm = resources.getDisplayMetrics();int width = dm.widthPixels;int height = dm.heightPixels;float[] size = new float[2];size[0] = width;size[1] = height;return size;}public static int getStatusBarHeight(Context context) {int height = 0;int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");if (resourceId > 0) {height = context.getResources().getDimensionPixelSize(resourceId);}return height;}/*** Bitmap对象是否为空。*/public static boolean isEmptyBitmap(Bitmap src) {return src == null || src.getWidth() == 0 || src.getHeight() == 0;}}
调用:
//relative_parent_first 其中此View是最外层的一个父布局
File file = new File(Environment.getExternalStorageDirectory(), "jieping.jpg");Bitmap bitmap = ScreenUtils.screenShot(HomeActivity.this, relative_parent_first);
权限别网了哈:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />