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

如题,需求就是把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哦

如果不加上这些,你会很蛋疼的发现,每次保存的图片更坏了的似的,嗯,就这样,很简单!

你可能感兴趣的:(安卓之小功能)