先上截图:
方法分为2种一种是Java版本,一种是kotlin版本
Java版本截图View
/**
* 截图当前View的Java版本方法
* @param view view
* @return 返回截图
*/
public Bitmap getBitmapFromView(View view) {
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.layout(0, 0, view.getWidth(), view.getHeight());
Log.d("ss", "combineImages: width: " + view.getWidth());
Log.d("ss", "combineImages: height: " + view.getHeight());
view.draw(canvas);
view.requestLayout();
return bitmap;
}
Kotlin版本截图View
非常简单一行代码
view.drawToBitmap()
注意此方法不能在打开view的时候立马调用会抛出如下异常
Caused by: java.lang.IllegalStateException: View needs to be laid out before calling drawToBitmap()
原因:java.lang.IllegalStateException:在调用 drawToBitmap() 之前需要对视图进行布局
再看看怎么保存到相册(可查看此链接的方法三: https://blog.csdn.net/xiayiye5/article/details/115251706)
package cn.yhsh.appwidget;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;
import java.io.FileNotFoundException;
import java.io.OutputStream;
/**
* @author xiayiye5
* @date 2023/3/23 9:54
*/
public class SavePicUtils {
private static final SavePicUtils SAVE_PIC_UTILS = new SavePicUtils();
private SavePicUtils() {
}
public static SavePicUtils getInstance() {
return SAVE_PIC_UTILS;
}
/**
* API29 中的最新保存图片到相册的方法
*/
public void saveImage29(Context context, Bitmap toBitmap) {
//开始一个新的进程执行保存图片的操作
Uri insertUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
//使用use可以自动关闭流
try {
OutputStream outputStream = context.getContentResolver().openOutputStream(insertUri, "rw");
if (toBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)) {
Log.e("保存成功", "success");
} else {
Log.e("保存失败", "fail");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
如何调用?
SavePicUtils.getInstance().saveImage29(context, view.drawToBitmap())
最后记得自己申请下动态权限。写入图片需要相应的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />