Android開発の現状をスクリーンショットしてフォトアルバムに保存するのが定番の姿勢

最初にスクリーンショットを撮ります:

Java版とKotlin版の2つの方法があります

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 バージョンのスクリーンショット 表示

非常にシンプルな 1 行のコード

view.drawToBitmap()

ビューが開かれたときにこのメソッドをすぐに呼び出すことはできず、次の例外がスローされることに注意してください。

Caused by: java.lang.IllegalStateException: View needs to be laid out before calling drawToBitmap()

原因: java.lang.IllegalStateException: drawToBitmap() を呼び出す前にビューを配置する必要があります

アルバムに保存する方法を見てみましょう (このリンクの方法 3 を確認できます: 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