整个视图组到位图

时间:2013-04-09 06:58:05

标签: android android-layout view android-widget

是否可以从viewgroup-object获取完整的位图?

此代码从当前在屏幕上的视图组中截取“屏幕截图”,但我想要整个视图,也是当前屏幕上没有的视图。

public void export(ViewGroup view){
    view.setDrawingCacheEnabled(true);
    view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    Bitmap bitmap = view.getDrawingCache(true);
}

2 个答案:

答案 0 :(得分:0)

在这里,我使用ScrollView将整个视图转换为位图 所以在这里你可以使用而不是scrollview任何其他视图组,如linerlayout等。

    Bitmap map = loadBitmapFromView(getApplicationContext(),scrollView);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            map.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            //you can create a new file name "test.jpg" in sdcard folder.
            File f = new File("/sdcard" +"/" + "mainemailpdf.jpg");
            f.createNewFile();
            //write the bytes in file
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
            bArray = bytes.toByteArray();
            // remember close de FileOutput
            fo.close();

并且对于loadBitmapFromView方法是:

public static Bitmap loadBitmapFromView(Context context, View v) {

        Toast.makeText(context,
                v.getMeasuredHeight() + "::::::::::::" + v.getMeasuredWidth(),
                Toast.LENGTH_LONG).show();
        if (v.getMeasuredHeight() > 0) {

            v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                    Bitmap.Config.ARGB_8888);

            Canvas c = new Canvas(b);

            v.layout(0, 0, v.getWidth(), v.getWidth());

            v.draw(c);

            return b;

        }

        return null;

    }

我希望它有所帮助:)

任何查询都让我知道。

答案 1 :(得分:0)

由于Android系统缩小了位图,因此无法实现。 例如,如果您的位图大小为480 * 800,则其大小为480 * 800 * 4 = 1536000。 乘以4是因为每个像素是4个字节 - RGBA。

对于每个未缩放的图像,意味着超过一万半。如果Android不会缩小图像,您可能会得到 几次图像加载后的OutOfMemoryException。 如 你有3个选择:

1)view.draw(画布)你将获得图像的可见部分(只有实际被绘制到屏幕上的部分)

2)getDrawingCache() - 将为您提供缩小的图像。

3)创建自定义视图,将位图保存到磁盘并在请求时从那里加载