728x90
1.CameraX 라이브러리 추가
dependencies {
...
implementation 'androidx.camera:camera-core:1.0.0-rc04'
implementation 'androidx.camera:camera-camera2:1.0.0-rc04'
implementation 'androidx.camera:camera-lifecycle:1.0.0-rc04'
implementation 'androidx.camera:camera-view:1.0.0-alpha23'
}
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></androidx.camera.view.PreviewView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/previewView">
<Button
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Start" />
<Button
android:id="@+id/stopButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:text="Stop" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
3. 카메라 권한추가
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testnote">
<uses-permission android:name="android.permission.CAMERA"/>
<application
...
</application>
</manifest>
4. MainActivity
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.AspectRatio;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.Preview;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.core.app.ActivityCompat;
import java.util.concurrent.ExecutionException;
public class MainActivity extends AppCompatActivity {
// 카메라 미리보기를 위한 뷰와 버튼 정의
PreviewView previewView;
Button startButton;
Button stopButton;
String TAG = "MainActivity";
ProcessCameraProvider processCameraProvider;
int lensFacing = CameraSelector.LENS_FACING_BACK; // 후면 카메라 사용
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 메인 레이아웃 설정
// 뷰 연결
previewView = findViewById(R.id.previewView);
startButton = findViewById(R.id.startButton);
stopButton = findViewById(R.id.stopButton);
// 카메라 권한 요청
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA}, 1);
// 카메라 프로바이더 초기화
try {
processCameraProvider = ProcessCameraProvider.getInstance(this).get();
}
catch (ExecutionException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
// 시작 버튼 리스너: 카메라 미리보기 바인딩
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
bindPreview(); // 미리보기 시작
}
}
});
// 정지 버튼 리스너: 카메라 언바인딩
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processCameraProvider.unbindAll(); // 미리보기 정지
}
});
}
// 카메라 미리보기 바인딩 메소드
void bindPreview() {
previewView.setScaleType(PreviewView.ScaleType.FIT_CENTER); // 미리보기 설정
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(lensFacing) // 카메라 선택
.build();
Preview preview = new Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_4_3) // 비율 설정
.build();
preview.setSurfaceProvider(previewView.getSurfaceProvider());
processCameraProvider.bindToLifecycle(this, cameraSelector, preview); // 라이프사이클에 바인딩
}
@Override
protected void onPause() {
super.onPause();
processCameraProvider.unbindAll(); // 앱 일시정지 시 카메라 언바인딩
}
}
'안드로이드 자바' 카테고리의 다른 글
[Android][Java] 그림 그리기 (2) | 2024.01.30 |
---|---|
[Android][Java] Camera2 API를 사용하여 사진찍기 (2) | 2024.01.28 |
[Android][Java] Camera2 API를 사용하여 사진찍기 (0) | 2024.01.19 |
[Android][Java] Intent 사용해서 유튜브 앱 열기 (0) | 2024.01.15 |
[Android][Java] 앱 아이콘, 앱 이름 변경하기 (0) | 2024.01.12 |