当调用getDrawingCache()时,视图太大而无法放入绘图缓存



我正在尝试对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): View太大,不适合绘图缓存,需要4784400字节,只有3932160可用

我如何正确地截取这个布局的屏幕截图?有没有另一种不用占用这么多内存的方法?

这是我最终捕获大屏幕外视图的方法:

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;
}

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

作为原来的问题是谈论一个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的完整高度

最新更新