如何在 Android 中获取 ImageView/any UI 组件后面的区域的 screenshot/bitmap?

How to take a screenshot/bitmap of the area behind an ImageView/any UI component in Android?

假设我有一个 ImageView、Grid 或其他控件。我想要做的是截取此控件背后的屏幕截图,比方说另一个包含背景图像或任何可能存在的控件。有什么办法可以做到这一点?我想到了 getDrawingCache();方法,但这也需要最高控制权。

我想这样做是为了让顶部控件后面的内容具有模糊透明的效果。我已经有一个模糊的方法,我只需要拍摄背景的精确照片。任何帮助将不胜感激!

您可以在任何视图上使用 getDrawingCache() 方法,因此如果您有对背景视图的引用,它应该可以像这样工作:

<your background view>.setDrawingCacheEnabled(true);
Bitmap contentBitmap = Bitmap.createBitmap(<your background view>.getDrawingCache());
<your background view>.setDrawingCacheEnabled(false);

contentBitmap 现在应该包含该视图中内容的位图。

public static Bitmap getViewBitmap(View v) {
    v.clearFocus();
    v.setPressed(false);

    boolean willNotCache = v.willNotCacheDrawing();
    v.setWillNotCacheDrawing(false);

    // Reset the drawing cache background color to fully transparent
    // for the duration of this operation
    int color = v.getDrawingCacheBackgroundColor();
    v.setDrawingCacheBackgroundColor(0);

    if (color != 0) {
        v.destroyDrawingCache();
    }
    v.buildDrawingCache();
    Bitmap cacheBitmap = v.getDrawingCache();
    if (cacheBitmap == null) {
        Log.e(tag, "failed getViewBitmap(" + v + ")", new RuntimeException());
        return null;
    }

    Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);

    // Restore the view
    v.destroyDrawingCache();
    v.setWillNotCacheDrawing(willNotCache);
    v.setDrawingCacheBackgroundColor(color);

    return bitmap;
}