PreviewView로 카메라 미리보기 표시

Android Jetpack CameraX : PreviewView

모든 카메라 앱의 일반적인 사용 사례는 카메라에서 미리보기를 표시하는 것입니다. 지금까지 이것은 대부분 camera2 API 엣지 케이스 주변에 존재하는 복잡성과 다양한 장치 동작으로 인해 제대로 이해하기가 매우 어려웠습니다. CameraX Jetpack 라이브러리의PreviewView 일부인은 다양한 Android 기기에서 개발자 친화적이고 일관되며 안정적인 API를 제공하여 개발자가 카메라 미리보기를 더 쉽게 표시 할 수 있도록합니다.

PreviewView 소개

PreviewViewView카메라 피드를 표시 할 수 있는 사용자 지정 입니다. 카메라에서 사용하는 미리보기 표면을 설정하고 처리하는 부담을 덜기 위해 만들어졌습니다.

앱에 기본 카메라 미리보기를 표시해야하는 경우 다음과 PreviewView같이 권장하는 방법입니다.

  • 사용하기 쉬운 : PreviewViewA는 View. 사용 사례 에서 Surface사용하는 것을 관리하여 레이아웃에서 카메라가 보는 것을 표시하는 데 필요한 모든 작업을 구현합니다 Preview.
  • 경량 : PreviewView미리보기에만 초점을 맞 춥니 다. 모든 내부 리소스는 카메라 미리보기를 설정하고 카메라가 사용하는 동안 미리보기 표면을 관리하는 데 사용됩니다. 이러한 우려의 분리를 통해 PreviewView코드를 깨끗하게 유지할 수 있습니다 .
  • Exhaustive : PreviewView화면에 카메라 피드를 표시하는 데 가장 어려운 부분 (가로 세로 비율, 크기 조정 및 회전 포함)을 처리합니다. 또한 다양한 장치, 화면 크기, 카메라 하드웨어 지원 수준 및 화면 분할 모드, 잠금 방향 및 자유 형식 다중 창과 같은 디스플레이 구성에서 원활한 경험을 제공하기위한 호환성 수정 및 해결 방법이 포함되어 있습니다.

PreviewView의 하위 클래스입니다 FrameLayout. 카메라 피드를 표시하려면, 그것은 사용 중 하나 SurfaceView이나 TextureView, 준비가되면 카메라 미리보기 표면을 제공, 시도는 카메라를 사용하는만큼 유효을 유지하고, 조기에 출시 할 때, 카메라가있는 경우 새로운 표면을 제공 아직 사용 중입니다.

SurfaceView일반적으로 TextureView전력 및 지연 시간을 포함한 특정 주요 측정 항목 보다 낫기 때문에 기본적으로 PreviewViewa를 사용하려고합니다 SurfaceView. 그러나 일부 장치 (주로 레거시 장치 )는 미리보기 화면이 조기에 릴리스 될 때 충돌합니다. 은 (는) SurfaceView이이 제어되는 한, 불행하게도, 표면이 해제 시점을 제어 할 수 없다 View계층. 이러한 장치에서는 대신 PreviewViewa를 사용하십시오 TextureView. 미리보기 회전, 투명도 또는 애니메이션이 필요한 경우 에도를 강제 PreviewView로 사용해야 TextureView합니다.

명시 적으로 당신이 원하는 구현을 설정할 수 있습니다 PreviewView호출하여 사용을 PreviewView.setPreferredImplementationMode(ImplementationMode)ImplementationMode입니다 중 하나 SURFACE_VIEW또는 TEXTURE_VIEW. PreviewView선호하는 모드가 SURFACE_VIEW이면 선택을 존중 하고 TEXTURE_VIEW.

⚠️를 호출하여 미리보기를 시작하기 전에 선호하는 구현 모드를 설정했는지 확인하세요 Preview.setSurfaceProvider(PreviewView.createSurfaceProvider()).

다음은의 기본 구현 모드를 설정하는 방법을 보여줍니다 PreviewView.

PreviewView — 미리보기

PreviewView사용 사례에서 미리보기 스트림을 시작하는 SurfaceProvider데 필요한를 만드는 기본 사항을 처리합니다 Preview. 은 SurfaceProvider카메라 프리뷰 스트림을 표시하기 위해 카메라에 제공 될 표면을 준비하고, 재생성을 담당 Surface필요한. PreviewView.createSurfaceProvider(CameraInfo)nullable CameraInfo인스턴스를 허용 합니다. PreviewView선호하는 구현 모드 및 카메라의 기능과 함께이를 사용하여 내부적으로 사용할 구현을 결정합니다. 당신이에 전달하면 null CameraInfo, PreviewView사용 TextureView이 선택된 카메라가 작동 여부를 알 수 없기 때문에, 구현 SurfaceView.

당신이 빌드하면 Preview사용 사례 및 기타 사용 사례 A와 당신이 필요로하는, 바인드를 LifecycleOwner의를 사용 CameraInfo을 만들 바운드 카메라에서 SurfaceProvider, 다음에 첨부 Preview호출하여 미리보기 스트림을 시작하는 데 사용 사례 Preview.setSurfaceProvider(SurfaceProvider).

다음은에 연결 PreviewView하여 Preview미리보기 스트림을 시작하는 방법을 보여줍니다 .

PreviewView — 스케일 유형

PreviewView 미리보기의 모양과 컨테이너 내 위치를 제어 할 수있는 API를 제공합니다.

  • 방법의 미리보기가 내부 (적합할지 여부를 정의 FIT ) 또는 필 ( FILL ) 컨테이너.
  • 경우 미리보기가 상단에 수 있는지 여부가 정의 (왼쪽 START ), 센터 ( CENTER ) 또는 오른쪽 아래 ( END ) 또는 컨테이너를.

스케일 유형 설정은 다음 두 가지 방법 중 하나로 수행 할 수 있습니다.

  • 다음 샘플에 표시된대로 PreviewViewscaleType속성 을 사용하여 XML 레이아웃 에서.

PreviewView.setScaleType(ScaleType)아래와 같이 호출 하여 프로그래밍 방식으로 .

PreviewView — 카메라 컨트롤

카메라 센서 방향, 장치의 회전, 표시 모드 및 미리보기 배율 유형 PreviewView에 따라 UI에서 미리보기 스트림을 올바르게 표시하기 위해 카메라에서 수신하는 미리보기 프레임을 배율 조정, 회전 및 변환 할 수 있습니다. 이것이 UI 좌표를 카메라 센서 좌표로 변환하는 것이 중요한 이유입니다. CameraX에서이 변환은 MeteringPointFactory. PreviewView하나를 만들 수있는 API를 제공 PreviewView.createMeteringPointFactory(cameraSelector)는 어디 CameraSelector묘사 카메라가 미리보기를 스트리밍.

PreviewView의는 MeteringPointFactory당신이 탭에 초점을 구현해야 할 때 유용합니다. 카메라 미리보기에서 자동 초점이 기본적으로 활성화되어 있지만 (카메라가 지원하는 경우)을 탭할 때 초점 대상을 제어 할 수도 있습니다 PreviewView. 는 MeteringPointFactory그 영역에 초점 카메라 있도록 카메라 센서 좌표 포커스 대상의 좌표를 변환한다.

다음 샘플은에 설정된 터치 리스너를 사용하여 탭하여 초점을 구현하는 방법을 보여줍니다 PreviewView.

또 다른 일반적인 카메라 미리보기 기능은 핀치 투 줌 (pinch-to-zoom)으로 미리보기를 핀치 할 때 카메라를 확대 및 축소 할 수 있습니다. 으로 구현하려면 터치 리스너PreviewView추가 하고 스케일 제스처 리스너에 연결합니다 . 이렇게하면 핀치 제스처를 차단하고 그에 따라 카메라의 줌 비율을 업데이트합니다.PreviewView

다음 샘플은를 사용하여 핀치 투 줌을 구현하는 방법을 보여줍니다 PreviewView.

PreviewView — 테스트 방법

PreviewView다양한 Android 기기에서 일관된 카메라 동작을 제공합니다. 이는 CameraX가 자동화 된 테스트 실험실 에서 테스트 PreviewView및 기타 API에 투자 한 덕분 입니다. 이 테스트는 두 가지 주요 범주로 나뉩니다.

  • 단위 테스트 검증 PreviewView구현 모드에 관해서는, 규모의 유형과 함께 '의 행동을 MeteringPointFactory. 또한 PreviewView컨테이너 크기가 변경 될 때, 디스플레이 레이아웃이 업데이트 될 때, Window.
  • PreviewView앱의 일부일 때 올바르게 작동하는지 확인 하고 그에 따라 미리보기 스트림을 표시하거나 중지하는 통합 테스트 입니다 . 이러한 테스트에는 앱이 실행되는 동안, 여러 번 닫았다가 다시 연 후, 카메라 렌즈를 앞뒤로 전환 한 후, 앱의 수명주기가 파괴되고 다시 생성 된 후 미리보기 상태 확인이 포함됩니다. 현재 이러한 테스트 는에서 미리보기가 시작되고 중지 될 때 신호를받는 것이 어려운 것으로 판명 되었기 때문에 대부분의 TextureView구현을 다룹니다 .PreviewViewSurfaceView

요약해서 말하자면:

  • PreviewViewView카메라 미리보기를 더 쉽게 표시 할 수 있는 사용자 지정 입니다.
  • PreviewViewSurfaceView기본적으로를 사용하여 미리보기 표면을 처리 하지만 TextureView필요하거나 요청하면 을 사용하는 것으로 돌아갈 수 있습니다 .
  • 바인드 다른 사용 사례처럼 ImageCapture하고 ImageAnalysis, A를 LifecycleOwner, 다음을 첨부하여 카메라 미리보기를 시작 SurfaceProvider에서 PreviewView바인딩에 Preview사용 사례.
  • PreviewView의 스케일 유형 을 정의하여 미리보기가 표시되는 방식을 제어합니다 .
  • MeteringPointFactory에서 가져 와서 미리보기에 탭하여 초점을 구현합니다 PreviewView.
  • 에서 제스처 리스너를 설정하여 미리보기에서 핀치 투 줌을 구현합니다 PreviewView.

Suggested posts

Flow / LiveData…. 무엇입니까? 최상의 사용 사례. (로그인 시스템 구축)

Flow / LiveData…. 무엇입니까? 최상의 사용 사례. (로그인 시스템 구축)

현대의 안드로이드 개발자로서 "라이브 데이터"또는 "플로우"라는 단어를 여러 번 접했을 것입니다. 관련 기사가 너무 많지만 대부분이 '사용'사례를 무시하고 초보자가 라이브 데이터를 이해하기 어렵다고 생각합니다. 라이브 데이터는 기본적으로 강력한 설계를 지원하는 라이브러리 모음 인 Android 아키텍처 구성 요소의 일부입니다. 테스트 및 유지 관리가 가능한 앱.

그래서 iPhone으로 전환하고 싶습니까?

그래서 iPhone으로 전환하고 싶습니까?

여기에 필요한 모든 것이 있습니다. 친구가이 기사를 요청했습니다. 여기 있습니다.

Related posts

Kotlin을 사용하여 Android RecyclerView 항목을 다시 정렬하려면 드래그하세요.

Android 앱에서 멋진 맞춤형 목록 작성

Kotlin을 사용하여 Android RecyclerView 항목을 다시 정렬하려면 드래그하세요.

이 기사에서는 항목을 다시 정렬 할 수있는 기능을 제공하는 RecyclerView를 구현하는 방법에 대해 알아 봅니다. 타사 라이브러리를 사용하지 않고이 작업을 수행 할 것입니다.

Google Play 인앱 리뷰

Google Play 인앱 리뷰

Google Play Core 라이브러리는 인앱 리뷰에 대한 지원을 추가하여 사용자가 앱이나 게임을 떠나지 않고도 평점과 리뷰를 제출할 수 있도록합니다. 이 문서는 메모장 앱 연구 사례를 통해 Android에서이 기능을 구현하는 방법과 Google Play 스토어에서 사용자의 가시성에 미치는 영향을 보여줍니다.

Android에서 나만의 AR 애플리케이션 만들기

Android에서 나만의 AR 애플리케이션 만들기

이 기사에서는 카메라에서 얼굴에 효과를주는 Android 애플리케이션을 실시간으로 작성하는 방법을 설명합니다. 여기서는 카메라 작업, 얼굴 찾기, 얼굴의 포인트 찾기 및 결과 그리기 등 모든 핵심 사항을 살펴 보겠습니다.

Gradle 종속성 : 메시 🤯

Gradle 종속성을 현명하게 관리하세요 !!

Gradle 종속성 : 메시 🤯

종속성이 증가 할 때마다 Gradle 파일을 관리하기가 어려워집니다. 이 블로그에서는 종속성을 다른 파일로 이동하고 유사한 종속성을 그룹화하여 관리하려고합니다.