2013/07/30

[Android]スクリーンショットを撮る(ViewをBitmapとして取得する)

時々プログラムからスクリーンショットを撮りたくなることがあると思います。
ずっとできないと思っていたのだけど実は View で描画したものを
Bitmap として取得することができました。

ステータスバーなどを含んだ画面全体を Bitmap として取得

いわゆるスクリーンショット。
View#getRootView | Android Developersを使うためになにか適当な View が必要。
public Bitmap getScreenBitmap(View view){
    return getViewBitmap(view.getRootView());
}

特定の View を Bitmap として取得

public Bitmap getViewBitmap(View view){
    view.setDrawingCacheEnabled(true);
    Bitmap cache = view.getDrawingCache();
    if(cache == null){
        return null;
    }
    Bitmap bitmap = Bitmap.createBitmap(cache);
    view.setDrawingCacheEnabled(false);
    return bitmap;
}
View#getDrawingCache | Android Developers はシステムの持っている Bitmap の参照を返す。
システム側から recycle されるので Bitmap#createBitmap | Android Developers で作り直す必要がある。

タグ(RSS)