안드로이드 스튜디오

안드로이드 스튜디오 CameraEX 코드 구조

coding art 2021. 12. 19. 13:04
728x90

스마트폰 카메라를 사용한 Image Caputre 과정을 살펴보자. activity_main.xml에 의한 스마트폰에서의 RelativeLayout 화면 구성은 ImageView 하나와 Button 하나로 구성된다. ImageView의 레이아웃 폭(width)과 높이(height)fill parent 로 이루어지며 Button ImageView 아래(Bottom)에 위치시킨다.

카메라 이미지 캡춰를 위한 MainActivity 코드 구조를 살펴보자. 2개의 @Overide로 이루어진다. 첫번째 method onCreate에서는 Bundle savedInstanceState에 의해서 모든 Activity들의 Instance 정보(클래스 실행 정보)를 저장하여 필요하면 previous 상태로 복원도 가능하도록 한다. 아울러 StartActivity() 만을 사용하면 그냥 카메라 모드로 되돌아 갈 수 있지만 StartActivityForReswult를 사용하여 Intent를 생성한다면 두 번째 methodonActivityResult를 사용하여 동일한 MainActivity 내에서 이지만 Intent data 정보를 넘겨받아서 스마트폰 화면에 Result를 나타낼 수 있게 된다.

Method onCreate을 살펴보면 btnCapture.setOnClickListner 안에 onCLickListener 안에 onClick 이 있다. 즉 카메라 촬영 버튼(btnCapture)을 클릭할 경우에 상속을 받아서 OnClickListner를 설정(set) 하고 신규로 View.onClickListener가 실행된다. onClick 이 일어날 경우에 이미 안드로이드에 들어 있어 제공되는 Media.ACTION_IMAGE_CAPTURE를 활용하자. 그 외에 직접 API를 활용하는 방법도 없지 않겠지만 안드로이드에서는 잡다할 정도로 많은 아이템들을 대상으로 코드 작성이 필요하므로 일일이 코드를 작성하기 보다는 주어진 hard cord 들을 사용하는 것이 편리한 듯하다.

 

만약 이와 같은 코드 구조가 마음에 들지 않을 경우 다음과 같은 코딩도 가능하다. Parent 로 사용하고 있는 btnCaptureshowCameraBtn 클래스로 대체하느 것이다. 이 기법은 이미 SimpleCamera에서 사용해 보았다.

SimpleCameraMainActivity 코딩에 의해 카메라 기능 ON 시키기

http://blog.daum.net/ejleep1/948

아울러 startActivityForResult() 루틴을 실행하되 값이 1로 설정된 Image_Capture_Code, request 값과 Intent 데이터를 넘겨주어 onActivityResult()에서 캡춰된 이미지를 처리하도록 하자.

참고로 간단하게 startActivity()를 사용하면 캡춰된 이미지 저장은 가능하나 화면에 출력할 수는 없으며 따라서 위 코드 자체가 필요 없게 된다.

 

다음의 카메라 이미지 캡춰 후 저장 작업이 끝난 후 화면상의 이미지 출력 결과를 살펴보자.

첨부된 파일을 다운받아 실행해 보자

CameraEx.zip

CameraEx.zip
0.37MB