在调用getDrawingCache()时,查看太大而无法适应绘图缓存

时间:2013-05-11 18:23:51

标签: android android-view

我正在尝试截取LinearLayout的内容。布局包含一个可以高度/宽度可变的滚动视图。当布局不是太大时(即您不需要在屏幕上滚动很多以查看所有内容),此代码可以正常工作:

View v1 = (LinearLayout)theLayout;

v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

但是,如果我尝试捕获的LinearLayout很大,那么应用程序会在v1.getDrawingCache()上使用空指针崩溃。

logcat中存在错误:

  

05-11 13:16:20.999:W / View(17218):视图太大,无法适合绘图   缓存,需要4784400字节,只有3932160可用

如何正确截取此布局的屏幕截图?还有另一种方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:12)

以下是最终为我拍摄完整的大屏幕外视图的原因:

public static Bitmap loadBitmapFromView(View v) 
{
    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);

    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}

它类似于答案here,除了我使用视图的宽度/高度来创建位图

答案 1 :(得分:1)

由于最初的问题是在讨论ScrollView,我只是会为任何遇到问题的人添加以下内容。要获得ScrollView的高度,v.getHeight不起作用,您需要使用:

v.getChildAt(0).getHeight()

所以完整的事情将是:

ScrollView scrollView = (ScrollView) result.findViewById(R.id.ScrlView);

loadBitmapFromView(scrollView);

public static Bitmap loadBitmapFromView(View v) 
{
int height = v.getChildAt(0).getHeight()
int width = v.getWidth()
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return b;
}

只需使用v.getHeight就可以获得屏幕高度,而不是ScrollView的完整高度。