Android 把布局保存成图片并分享

该博客介绍了如何在Android中将布局转换为图片并进行分享。首先,讲解了实现原理,即绘制布局为位图并保存。接着,讨论了添加存储权限的重要性,包括在AndroidManifest.xml中声明权限以及高版本系统的动态申请。然后,详细展示了截图保存和分享的步骤,并提供了完整的MainActivity代码。最后,给出了代码实现的效果和下载链接。
摘要由CSDN通过智能技术生成

原理

将布局绘制成位图并保存,然后调用系统自带的分享功能

添加存储权限

  1. 在AndroidManifest.xml 声明权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在这里插入图片描述
2. 高版本Android 要需要动态申请权限

    /**
     * 动态申请权限
     */
    private void checkNeedPermissions() {
   
        //6.0以上需要动态申请权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
   
            //多个权限一起申请
            ActivityCompat.requestPermissions(this, new String[]{
   
                    Manifest.permission.CAMERA,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE
            }, 1);
        }
    }

截屏保存

    /**
     * 截屏
     */
    public void captureScreen() {
   
        Runnable action = new Runnable() {
   
            @Override
            public void run() {
   
                /*获取windows中最顶层的view*/
                final View contentView = getWindow().getDecorView();
                try {
   
                    Log.e("chen", contentView.getHeight() + ":" + contentView.getWidth());
                    bitmap = Bitmap.createBitmap(contentView.getWidth(), contentView.getHeight(), Bitmap.Config.ARGB_4444);
                    contentView.draw(new Canvas(bitmap));
                    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
                    //将位图的压缩到指定的OutputStream,可以理解成将Bitmap保存到文件中!
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteOut);
                    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test/");
                    if (!file.exists()) {
   
                        file.mkdirs();
                    }
                    savePic(bitmap, file.toString() + File.separator + "short.png");
                } catch (Exception e) {
   
                    e.printStackTrace();
                } finally {
   
                    try {
   
                        if (null != byteOut)
                            byteOut.close();
                        if (null != bitmap && !bitmap.isRecycled()) {
   
//                            bitmap.recycle();
                            bitmap = null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗恋花香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值