11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ビューのスクリーンショットを保存する

Last updated at Posted at 2013-09-29

アニメーションなどの経過状況をPNGファイルに保存したい時ってありますよね?え、ない?

そんなときのためにビューのスクリーンショットをPNGイメージとして保存するためのクラスを作ってみました。
Runnableインターフェースを実装しているのでHandler#postDelayed()メソッドの引数に指定出来ます。

SavePictureRunner
public class SavePictureRunner implements Runnable {
	private File mFileName;
	private View mView;

	public SavePictureRunner(View view, File filename) {
		this.mView = view;
		this.mFileName = filename;
	}

	@Override
	public void run() {
		FileOutputStream output = null;
		try {
			output = new FileOutputStream(mFileName);

			Bitmap saveBitmap = null;
			mView.setDrawingCacheEnabled(true);
			mView.setDrawingCacheBackgroundColor(Color.WHITE);
			saveBitmap = Bitmap.createBitmap(mView.getDrawingCache());
			saveBitmap.compress(CompressFormat.PNG, 100, output);
			output.flush();
		} catch (IOException e) {
			Toast.makeText(mView.getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
			e.printStackTrace();
		} finally {
			mView.setDrawingCacheEnabled(false);
			if (output != null) {
				try {
					output.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

んで、こんな風に使います。なお、R.id.frameは、ビューグループ、R.id.animateはframeに内包されるImageViewとします。

使用例
Animation animation;
animation = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
animation.setDuration(4000);
File path = new File(
		Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
		"AppName");
if (!path.exists()) {
	path.mkdir();
}

View view = findViewById(R.id.frame);
Handler h = new Handler();
for (int i = 0; i < 5; i++) {
	h.postDelayed(new SavePictureRunner(view, new File(path, i + ".png")), i * 1000);
}

ImageView animate = (ImageView)findViewById(R.id.animate);
animate.startAnimation(animation);

アニメーションが終わると、次の五つのタイミングで、frameビューのスクリーンショットが/Pictures/AppName/配下に保存されます。

  • 0.png:アニメーション開始前の画像
  • 1.png:アニメーション開始1秒後の画像
  • 2.png:アニメーション開始2秒後の画像
  • 3.png:アニメーション開始3秒後の画像
  • 4.png:アニメーション終了時の画像(ただし、タイミングによってはアニメーション終了後に画像になることがある)

ちなみに、アニメーションさせる対象となるビューのスクリーンショットを撮ってもアニメーションの様子は分かりませんので注意(アニメーションしていないように見える)

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?