安卓开发之把布局转换成图片,再把图片保存至本地,踩坑后至终极解决方案

如题,需求就是把xml里面的布局转换成图片,然后保存下来,各位是不是觉得特别简单啊,不错,思路不复杂,可是实践起来就会有坑了,下面我把完整的流程奉上——

从布局得到Bitmap,到保存,当然某些地方写法可能不一样:
 // 获取图片某布局
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 要在运行在子线程中
                final Bitmap bmp = llQrcodePicture.getDrawingCache(); // 获取图片
                FileHelper.getInstance().saveBitmap(bmp, "10200000093", llQrcodePicture, mContext);
                llQrcodePicture.destroyDrawingCache(); // 保存过后释放资源
                isSaveable = true;
            }
        }).start();
其中FileHelper.getInstance().saveBitmap()方法如下,这个是我写了的大概,比较别扭
    public boolean saveBitmap(Bitmap bm, String picName, View view, final Context context) {
        final Context mContext = context;
        try {
            final File f = new File(mediaPath, picName + ".png");
            if (f.exists()) {
                f.delete();
            }
            FileOutputStream out = new FileOutputStream(f);
            bm.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();

            view.post(new Runnable() {
                @Override
                public void run() {
                    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                    Uri uri = Uri.fromFile(f);
                    intent.setData(uri);
                    mContext.sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file哦
                }
            });
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return false;

    }

其中重点就是下面这些代码:

                 Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                    Uri uri = Uri.fromFile(f);
                    intent.setData(uri);
                    mContext.sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file哦
如果不加上这些,你会很蛋疼的发现,每次保存的图片更坏了的似的,嗯,就这样,很简单!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值