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

Dis*_*Dev 5 android android-view

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

View v1 = (LinearLayout)theLayout;

v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
Run Code Online (Sandbox Code Playgroud)

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

logcat中有一个错误:

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

如何正确截取此布局的屏幕截图?还有另一种方法可以解决它没有使用如此多的内存吗?

Dis*_*Dev 13

以下是最终为我捕捉大屏幕外视图的全部内容:

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;
}
Run Code Online (Sandbox Code Playgroud)

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