我正在尝试对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的完整高度