Android开发之截图当前view并保存到相册的标准姿势

先上截图:

方法分为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" />

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/129724933