我想获得活动的“全页”屏幕截图。视图包含一个包含许多项目的RecyclerView。
我可以用这个函数对当前视图进行截图:
public Bitmap getScreenBitmap() {
View v= findViewById(R.id.container).getRootView();
v.setDrawingCacheEnabled(true);
v.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
v.setDrawingCacheEnabled(false); // clear drawing cache
return b;
}
但它只包含我可以正常查看的项目(如预期的那样)。
截图时,有没有什么方法可以让RecyclerView神奇地显示完整长度(一次显示所有项目)?
如果没有,我应该如何处理这个问题?
6条答案
按热度按时间ux6nzvsh1#
这段代码适用于recyclerview项目类型,可能与其大小无关。
它是用一个具有线性布局管理器和三种项目类型的recyclerview测试的。还需要用其他布局管理器来检查它。
up9lanfz2#
下面是我对
LinearLayoutManager
的解决方案,当所有项目都是相同大小并且只有一种类型的项目时。此解决方案基于This answer。注意:可能导致内存不足错误。
**注2:**最初是用Kotlin编写的,Here是我使用的原始代码。
jmo0nnb33#
拍摄完整Recyclerview的屏幕截图,无论其项目和项目类型如何:
这段代码的工作原理就像一个魅力。
这里有一个简单的方法来做到这一点,简短而准确:
8xiog9wr4#
我找到的最佳解决方案是
1.创建新的NestedScrollView
1.将其添加到recyclerview的父级
1.删除recyclerview从其父“重要的是要添加到一个新的父”
1.添加recyclerview到nestedscrollview
1.截图nestedscrollview
1.将recyclerview添加到其父节点。
此方法将返回nestedscrollview的屏幕截图
使用完位图后别忘了回收它
zf2sa74q5#
我写了一个方法来获得几个不同视图的截图:
6ioyuze26#
灵感来自Nouman Ch回答,该解决方案工作得很好,但我在最终图像中面临背景颜色问题,并且在此之后recyclerView滚动也无法正常工作。这里是快速修复!
从recyclerView创建位图后