从包括屏幕边界外的视图区域的视图创建位图

Create a bitmap from a view including area of view outside of screen bounds

我有一个视图,其内容超出了显示范围,例如可滚动的内容。已经有关于如何创建视图位图的帖子,但这些都仅限于创建一个位图,该位图将仅显示屏幕上可见的那部分视图。我需要包括未显示的部分。

我认为视图的绘图缓存可能是可行的方法,但我不确定如何执行此操作,因为我发现的代码示例仅限于屏幕尺寸。

重要提示:我的应用程序启用了硬件加速,因此任何使用软件 canvas 的尝试都会失败,因为所有视图都绑定到硬件 canvas。

答案是您可以直接绘制位图,请参阅

中的操作方法

关键是用 View.MeasureSpec.UNSPECIFIED 测量它,它将在没有任何屏幕尺寸限制的情况下绘制它(所有子元素都将被允许根据其内容调整大小,如果他们指定的话)

请注意,如果视图很大,这可能会使用大量内存(比例因子可用于以牺牲质量为代价来减少内存使用量。)