**
截屏并保存图片功能
**
首先,重点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" />