我正在尝试截取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可用
如何正确截取此布局的屏幕截图?还有另一种方法可以解决这个问题吗?
答案 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的完整高度。