물에 살고싶은 개발자

[CameraView] 사용하기 쉬운 카메라 라이브러리 기본 사용법 본문

Android

[CameraView] 사용하기 쉬운 카메라 라이브러리 기본 사용법

돼지사랑 2022. 8. 21. 16:55

프로젝트에서 커스텀 카메라를 사용할 일이 있었다. 처음엔 안드로이드 자체지원하는 카메라X를 사용했지만..

사용법도 그리 심플하지만은 않았고, 무엇보다 카메라를 바인딩하는 과정에서 자잘한 문제가 발생하는걸 확인. 결국 고민하다 해당 라이브러리를 사용하게 되었기에 기본 사용법에 대한것들을 남기고자 한다.

 

바로 시작 ! 

 

1. 설치 - 아래 두가지만 수행해주자 

repositories 추가 -> 버전에 따라 다르지만 글쓰는 날짜 기준으로는 setting.gradle에 추가해줘야한다.

repositories {
  mavenCentral()
}

dependencies 추가

dependencies {
  api 'com.otaliastudios:cameraview:2.7.2'
}

 

2. 카메라뷰 추가

카메라를 사용할 액티비티나 프래그먼트의 레이아웃에 뷰 추가

<com.otaliastudios.cameraview.CameraView
    android:id="@+id/camera"
    android:keepScreenOn="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

 

마찬가지로 코드에 초기화 추가 -> 라이프사이클을 연결해줌으로써 따로 컨트롤할 필요가 없어진다.

binding.camera.setLifecycleOwner(viewLifecycleOwner)

 

이제 사진,동영상을 찍거나 전,후면 카메라 전환은 전부 카메라뷰 객체를 통해 하면 된다.

아래는 기본적인 사용법들이다. 코드에 주석을 달아놧으니 알기 어렵진 않을것이다. 

binding.apply {
    // 사진 또는 동영상 결과 나오는 리스너
    camera.addCameraListener(object : CameraListener() {
        // 사진 촬영 결과 리스너
        override fun onPictureTaken(result: PictureResult) {
            Log.e(TAG, "onPictureTaken")
            val file = File(
                requireActivity().filesDir,
                "picture_${System.currentTimeMillis()}.jpg"
            )
            result.toFile(file) { resultFile ->
                resultFile?.let {
                    // 사진 파일 사용
                }
            }
        }

        // 동영상 촬영 결과 리스너
        override fun onVideoTaken(result: VideoResult) {
            Log.e(TAG, "onVideoTaken")
            result.file.apply {
                // 동영상 파일 사용
            }
        }

        // 동영상 촬영 종료 리스너
        override fun onVideoRecordingEnd() {
            super.onVideoRecordingEnd()
            Log.e(TAG, "onVideoRecordingEnd: ")
        }

        // 사진 촬영 시작 리스너
        override fun onPictureShutter() {
            Log.e(TAG, "onPictureShutter: ")
        }

        // 동영상 촬영 시작 리스너
        override fun onVideoRecordingStart() {
            Log.e(TAG, "onVideoRecordingStart: ")
        }
    })

    //region 카메라 관련 버튼 리스너
    // 전,후면 카메라 전환 버튼 리스너
    switchBtn.setOnClickListener {
        camera.toggleFacing()
    }
    // 사진 또는 동영상 촬영 버튼 리스너
    captureBtn.setOnClickListener {
        // 카메라 촬영중이라면 촬영종료
        if (camera.isTakingVideo) {
            camera.stopVideo()
        }
        // 카메라 모드에 따라 다르게 실행
        else if (camera.mode == Mode.PICTURE) camera.takePicture()
        else if (camera.mode == Mode.VIDEO) camera.takeVideo(
            File(requireActivity().filesDir, "video_${System.currentTimeMillis()}.mp4")
        )
    }
    // 사진 모드 버튼 리스너
    pictureModeBtn.setOnClickListener {
        // 사진 촬영 모드로 변경
        cameraViewFinder.mode = Mode.PICTURE
    }
    // 동영상 모드 버튼 리스너
    videoModeBtn.setOnClickListener {
        // 동영상 촬영 모드로 변경
        cameraViewFinder.mode = Mode.VIDEO
    }
    //endregion
}

 

위 내용들이면 기본적인 사용법들은 전부 해둿으니 크게 어려울것은 없을것이다. 

더 자세한 사항들은 라이브러리의 공식홈페이지 문서를 참고하자 

 

끝!

Comments