如何在保持Android中每个ImageView的位置的同时将多个ImageView保存为一个位图?

时间:2016-09-13 09:27:33

标签: java android bitmap

我有三个ImageView,我需要能够保存为一个单独的Bitmap。以下代码用于将三个ImageView保存为一个Bitmap,但它将每个图像推到左上角,从而将图像的外观破坏给用户。其中两个ImageView用颜色填充,另一个是实际图像。如何将ImageView保存为一个位图,同时仍保持其在布局中的位置?

这是我到目前为止所尝试的内容:

    public void saveDrawer(){
        Bitmap mainBmp = backImage.getDrawingCache();
        Bitmap centerBmp = centerImage.getDrawingCache();
        Bitmap handleBmp = handleImage.getDrawingCache();

        Canvas canvas = new Canvas(mainBmp);
        canvas.drawBitmap(centerBmp, 1, 1, null);
        canvas.drawBitmap(handleBmp, 1, 1, null);

        OutputStream fOut = null;
        try {
            File root = new File(Environment.getExternalStorageDirectory()
                    + File.separator + "CustomDrawer" + File.separator);
            root.mkdirs();
            File sdImageMainDirectory = new File(root, "customdrawer.png");
            fOut = new FileOutputStream(sdImageMainDirectory);
            Log.d("Path", fOut.toString());
        } catch (Exception e) {
            Toast.makeText(this, "Error occured. Please try again later.",
                    Toast.LENGTH_SHORT).show();
        }

        try {
            mainBmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            fOut.flush();
            fOut.close();
        } catch (Exception e) {
        }
    }

结果图像看起来像这样:

enter image description here

但是看起来像这样: enter image description here

2 个答案:

答案 0 :(得分:4)

canvas.drawBitmap(handleBmp, 1, 1, null);

即1,1,可以设置位置

答案 1 :(得分:1)

关于这个问题的上下文,我认为你应该做的是,将所有ImageView安排在单父布局中,例如LinearLayout或FrameLayout,或者可以是RelativeLayout。然后从这些父级中的一个获取绘图缓存并将该位图保存到SD。

注意:相应地在布局上启用和禁用绘图缓存。这就是我所做的。

relativeLayoutBackground.setDrawingCacheEnabled(true);
relativeLayoutBackground.buildDrawingCache(true);
Bitmap bitmap = relativeLayoutBackground.getDrawingCache();