Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 프로그래밍 방식으로 스크린샷 캡처하는 방법

이 튜토리얼에서는 안드로이드 앱에서 프로그래밍 방식으로 화면을 캡처하는 방법을 단계별로 알아봅니다. 뷰(View)를 비트맵(Bitmap)으로 변환하여 ImageView에 표시하는 간단한 예제를 통해 스크린샷 기능의 핵심 원리를 익힐 수 있습니다.

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입니다. TextView를 클릭하면 현재 화면이 캡처되어 ImageView에 표시됩니다.

3단계: MainActivity 작성

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) 메서드입니다. 이 메서드에는 부모 뷰(parent view)를 전달하여 화면 전체(상단부터 하단까지)를 캡처합니다. 실제 스크린샷을 수행하는 코드는 다음과 같습니다.

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

동작 원리를 살펴보면 다음과 같습니다.

1. Bitmap.createBitmap(): 뷰의 너비와 높이에 맞는 빈 비트맵을 ARGB_8888 형식으로 생성합니다.
2. Canvas 객체 생성: 생성된 비트맵 위에 그림을 그릴 수 있는 캔버스를 만듭니다.
3. view.draw(canvas): 대상 뷰를 캔버스에 그려서 비트맵에 화면 내용을 담습니다.
4. setImageBitmap(): 완성된 비트맵을 ImageView에 설정하여 화면에 표시합니다.

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭합니다. 목록에서 자신의 모바일 기기를 선택하면, 기기에 아래와 같은 기본 화면이 표시됩니다.

안드로이드에서 프로그래밍 방식으로 스크린샷 캡처하는 방법

이제 TextView를 클릭하면 화면이 캡처되어 아래와 같이 ImageView에 표시됩니다.

안드로이드에서 프로그래밍 방식으로 스크린샷 캡처하는 방법

마무리 및 참고 사항

이 예제는 앱 내부의 특정 뷰를 캡처하는 방식입니다. 참고로 안드로이드 5.0(API 21) 이상에서는 MediaProjection API를 사용하면 다른 앱을 포함한 전체 화면을 캡처할 수도 있으며, 이 경우 사용자에게 권한 허용을 요청하는 절차가 필요합니다. 또한 저장된 이미지를 갤러리에 저장하려면 Bitmap.compress() 메서드를 활용하면 됩니다. 상황에 맞는 방식을 선택하여 활용하시기 바랍니다.