くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

【Android】 特定のViewのスクリーンショットを共有する

SNSなどへのシェア機能などで、画面のスクリーンショットを共有したかった。
Viewごとでキャプチャできるようなので、その時の備忘録φ(..)メモメモ

View view = ...; // スクリーンショットを取りたいView

// Viewのスクリーンショットを取得
File file = new File(dir, "tmp_image.png");
try (FileOutputStream fos = new FileOutputStream(file, false)) {
    view.setDrawingCacheEnabled(true);      // キャッシュを取得する設定にする
    view.destroyDrawingCache();                  // 既存のキャッシュをクリアする
    Bitmap capture = view.getDrawingCache();

    // 画像のフォーマットと画質と出力先を指定して保存
    capture.compress(Bitmap.CompressFormat.PNG, 100, fos);
    fos.flush();

    view.setDrawingCacheEnabled(false);
} catch (Exception e) {
    file = null;
}

// 共有する処理
ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(activity);
builder.setText("共有するメッセージ");
if (file != null) { // 画像がある場合
    builder.setType("image/png");
    builder.addStream(Uri.fromFile(file));
} else { // 画像がない場合
    builder.setType("text/plain");
}

builder.startChooser();

参考にしたサイト様