如何捕捉截图?

时间:2017-11-17 08:05:19

标签: android screenshot

我知道有很多关于捕获屏幕截图的问题,我已经检查了大部分屏幕截图。他们有相同的答案(代码变化很小)。

我有以下截图捕获方法:

@NonNull
public static Bitmap takeScreenShot(Window window) throws IOException {
    final View rootView = window.getDecorView().getRootView();
    final boolean drawingCacheEnabled = rootView.isDrawingCacheEnabled();
    rootView.setDrawingCacheEnabled(true);

    try {
        return Bitmap.createBitmap(rootView.getDrawingCache());
    } finally {
        rootView.setDrawingCacheEnabled(drawingCacheEnabled);
    }
}

你可以像这样使用它:takeScreenShot(getActivity().getWindow())

然而,这些方法有几个局限性:

  1. 如果您在屏幕上有一些对话框,则不会捕获它们 屏幕截图。
  2. 它是否适用于硬件加速视图?根据 到文件:
      

    打开硬件加速时,启用
      绘图缓存对渲染没有影响,因为系统使用了一个   不同的加速机制忽略了旗帜

  3. 屏幕截图包含黑框 而不是GLviews。 (例如,当你的应用程序有地图时)。这似乎是第二点的结果。
  4. 所以我的问题是,是否有任何解决方案没有生根可以至少解决我的一些问题?

1 个答案:

答案 0 :(得分:1)

查看以下GitHub仓库(不是我的!):https://github.com/AndroidDeveloperLB/ScreenshotSample

此外,以下内容将非常有用: How to properly take a screenshot, globally?