Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidでプログラムからスクリーンショットを撮影する方法【コード付きで解説】

Androidでプログラムからスクリーンショットを撮影する方法

本記事では、Androidアプリ内からプログラムでスクリーンショットを撮影し、その結果をImageViewに表示する方法を解説します。BitmapとCanvasを活用したシンプルな実装例を、ステップごとにわかりやすく紹介していきます。

ステップ1:新規プロジェクトの作成

まず、Android Studioで新規プロジェクトを作成します。「File」→「New Project」を選択し、必要な情報をすべて入力してプロジェクトを作成しましょう。

ステップ2:レイアウトファイルの作成

次に、res/layout/activity_main.xmlに以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="#33FFFF00"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/screenShot"
        android:layout_width="300dp"
        android:layout_height="300dp" />
    <TextView
        android:id="@+id/text"
        android:textSize="18sp"
        android:layout_gravity="center"
        android:text="Click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

このレイアウトでは、ImageViewとTextViewの2つのビューを配置しています。ユーザーがTextViewをクリックするとスクリーンショットが撮影され、その画像がImageViewに表示される仕組みです。

ステップ3:MainActivity.javaの実装

続いて、src/MainActivity.javaに以下のコードを追加します。

package com.example.andy.myapplication;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    int view=R.layout.activity_main;
    ImageView screenShort;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(view);
        final LinearLayout parent=findViewById(R.id.parent);
        screenShot=findViewById(R.id.screenShot);
        textView=findViewById(R.id.text);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("It is screen shot text");
                screenShot(parent);
            }
        });
    }
    public void screenShot(View view) {
        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),
        view.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
        screenShot.setImageBitmap(bitmap);
        textView.setText("click");
    }
}

上記のコードでは、screenShot(View view)メソッドを定義しています。このメソッドには、画面の先頭から末尾まで全体を撮影対象とする親ビューを渡します。スクリーンショットを撮影する際の核となるコードは、以下の通りです。

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),
view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
screenShort.setImageBitmap(bitmap);

処理の流れとしては、まずBitmap.createBitmap()でビューと同じサイズのBitmapを生成し、そのBitmapを基にCanvasを作成します。その後、view.draw(canvas)を呼び出すことで、ビューの内容がCanvas(=Bitmap)に描画され、最後にsetImageBitmap()でImageViewに結果を表示しています。

アプリの実行と動作確認

それでは、アプリを実行してみましょう。Androidの実機をパソコンに接続していることを前提に進めます。Android Studioからアプリを起動するには、プロジェクト内のアクティビティファイルを開き、ツールバーの「Run」Androidでプログラムからスクリーンショットを撮影する方法【コード付きで解説】アイコンをクリックします。実行するモバイルデバイスを選択すると、端末に以下のようなデフォルト画面が表示されます。

Androidでプログラムからスクリーンショットを撮影する方法【コード付きで解説】

次に、TextViewをクリックしてみてください。スクリーンショットが撮影され、以下のようにImageViewに表示されます。

Androidでプログラムからスクリーンショットを撮影する方法【コード付きで解説】

  1. Macでスクリーンショットを撮る方法|画面全体・範囲指定・ウィンドウ別の撮り方を徹底解説

    AppleのMacは、一般的なコンピュータユーザーが求めるほぼすべての作業に対応できる万能マシンです。もちろん、スクリーンショット(画面キャプチャ)の撮影もそのひとつです。しかし実際には、Macでスクリーンショットを撮る具体的な方法を知らないユーザーは少なくありません。また、方法を知っていても、Macが実はさまざまな種類のスクリーンショットに対応していることに気づいていない方も多いようです。この記事では、Macで撮影できる多彩なスクリーンショットの種類と、それぞれの手順をわかりやすく解説します。画面全体のスクリーンショットを撮る方法まず、画面に撮影したい内容が表示されていることを確認します。そ

  2. Androidのリカバリーモードでスクリーンショットを撮影する方法

    スクリーンショットは、正確な情報を他の人と共有するための最も手軽な方法のひとつであり、トラブル発生時の確かな証拠としても活用できます。通常、Androidでスクリーンショットを撮るのは、音量下ボタンと電源ボタンを同時に押すだけで非常に簡単です。しかし、端末の起動時(ブート時)やリカバリーモード中の画面を撮影したい場合は、このキーの組み合わせでは撮ることができません。 実は、Androidには複数のカスタムリカバリーが存在しますが、そのどれも起動時のスクリーンショット撮影には対応していません。つまり、Androidのリカバリーモードは標準状態では、スクリーンショットの撮影やエラー内容のコピーを許