Android 截屏当前View并保存本地(这个方法不支持Dialog内容)

当前这个功能发现不支持截取当前弹出的Dialog内容,后面换方法优化

public class ScreenImageUtils {
    private UploadFinish uploadFinish;

    public ScreenImageUtils(UploadFinish uploadFinish) {
        this.uploadFinish = uploadFinish;
        screenCaptureNoStatusBar();
    }

    /**
     * 截取当前可见范围屏幕(不包含状态栏)
     */
    private void screenCaptureNoStatusBar() {
        View view = BaseActivity.getContext().getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        // 获取状态栏高度
        Rect rect = new Rect();
        view.getWindowVisibleDisplayFrame(rect);
        int statusBarH = rect.top;
        // 获取屏幕宽高
        int w = view.getWidth();
        int h = view.getHeight();
        // 去掉状态栏
        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarH, w, h - statusBarH);
        // 销毁缓存信息
        view.destroyDrawingCache();
        saveBitmapToFile(bitmap);
    }


    // 保存Bitmap到指定路径,如果文件已存在则替代
    FileOutputStream out;
    private void saveBitmapToFile(Bitmap bitmap) {
        // 确保目录存在
        File image = createImageFile();
        // 尝试将Bitmap保存到文件
        try{
            out = new FileOutputStream(image);
            // 第一个参数是压缩格式(PNG, JPEG等),第二个参数是质量(0-100),第三个是输出流
            // 这里以JPEG格式保存,质量为100%
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
            try {
                if(out!=null){
                    out.close();
                }
            }catch (Exception e1){

            }
        }finally {
            try {
                if(out!=null){
                    out.close();
                }
                String absolutePath = image.getAbsolutePath();
                Log.e("JobScheduler",absolutePath);
                //上传图片上传回调用jobFinished
                uploadFinish.uploadImageFinish();
            }catch (Exception e){

            }
        }
    }

    private File createImageFile(){
        try {
            String imageFileName = "AI_SD_SCREEN_IMAGE";
            File storageDir = BaseActivity.getContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
            File image = new File(storageDir+"/"+imageFileName+".jpg");
            return image;
        }catch (Exception e){
            Log.e("111",e.getMessage());
        }
        return null;
    }

    interface UploadFinish{
        void uploadImageFinish();
    }
}

相关推荐

  1. Android方法

    2024-07-18 03:08:03       34 阅读
  2. C# 保存为图片

    2024-07-18 03:08:03       32 阅读
  3. Android 10.0 流程

    2024-07-18 03:08:03       44 阅读
  4. Android10以上MediaProjection

    2024-07-18 03:08:03       93 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 03:08:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 03:08:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 03:08:03       58 阅读
  4. Python语言-面向对象

    2024-07-18 03:08:03       69 阅读

热门阅读

  1. Spring源码-读取XML文件配置信息

    2024-07-18 03:08:03       19 阅读
  2. 使用 Django 框架进行开发的基本模板

    2024-07-18 03:08:03       21 阅读
  3. ubuntu安装mininet-wifi

    2024-07-18 03:08:03       19 阅读
  4. VPN介绍

    2024-07-18 03:08:03       20 阅读
  5. Ubuntu下如何设置程序include搜索路径及链接路径

    2024-07-18 03:08:03       24 阅读
  6. 生成式 AI 的发展方向,是 Chat 还是 Agent?

    2024-07-18 03:08:03       25 阅读
  7. Chapter 2: An Introduction to ASP.NET Core in Layman‘s Terms

    2024-07-18 03:08:03       18 阅读
  8. function calling实现调用理杏仁api获取数据

    2024-07-18 03:08:03       23 阅读