首页 > 解决方案 > 如何在 Android 中获取包括对话框和 Toast 在内的所有内容的像素位图?

问题描述

我在互联网上做了一些搜索。有些人建议使用 PixelCopy API 或 Canvas。但是,任何一种方式都仅限于获取装饰视图的位图。如果当前活动顶部有 toast 或 AlertDialog,则它们的图像不会出现在最终位图中。

所以我的问题是,我可以获得整个活动的位图,而不仅仅是视图,所以位图包含活动顶部的任何对话框或 Toast?

标签: android

解决方案


所以我的问题是,我可以获得整个活动的位图,而不仅仅是视图,所以位图包含活动顶部的任何对话框或 Toast?

是的,我们可以使用窗口管理器来访问层次结构中的所有视图。

如何实现这一点:

  1. 获取活动的窗口管理器,它负责管理有序的窗口列表并包含有关它们在屏幕上的布局方式的信息。这Object可以保持您需要的视图层次结构。
  2. 对于对象中的目标类,使用getDeclaredFields()方法获取声明的字段。这给出了为给定活动视图声明的所有视图字段。您可以使用字段标签mGlobalmRoots和来区分视图层次结构mParams
  3. 这使您可以访问活动中声明的所有视图字段。

Falcon对此进行了深思熟虑的实施。


推荐阅读