안드로이드 스튜디오

안드로이드 스튜디오 Camera 코딩

coding art 2020. 2. 12. 13:24
728x90

 

20202월 초 현재 android studio 3.5.3 버전의 기본적인 기능만을 사용하는 가장 학습하기 쉬운 예제로서 Camera 예제를 다루어 보았다. 하지만 2022년 5월 현재 안드로이드 스튜디오가 Bumble Bee 버전으로 업그레이드 되었으며 스마트폰도 현재 Quntum Jump 로 업그레이드 되어 USB 케이블에 의한 앱 실행에서 WiFi 전송 방식이 보급되어 안드로이드 코드 작성 환경이 개선되었으며 블로그 내용도 일부분 손보게 되었다.

 

스마트폰 기능 중에서 Camera에 의한 영상 촬영 기능은 너무나 중요하다. 계산기 예제에서 마찬가지로 안드로이드 스튜디오의 기본적인 골격을 이해해야 하는 차원에서 activity_main.xml MainActivity.java를 구해다 복사 붙여넣기 하여 실제 스마트폰의 Camera 기능을 작동시켜 보기로 한다. Camera 의 구조는 스마트폰에서 카메라 화면이 보이면 초점이 맞춰진 후 버튼을 눌러 촬영을 하고 Gallery 에 저장할 수 있도록 구성한다. 하지만 Gallery 저장 문제는 안드로이드 코드 작성 면에서 상당히 긴 코드를 추가해야하는데 초보자가 해보기엔 그다지 흥미가 없는 부분일 수 있으므로 배제하고 단지 카메라 찰칵하는 과정과 저장하는 척 하는데 까지만 살펴보기로 한다.

 

(실제로 촬영된 이미지 저장은 다음 사이트 주소를 참조하자: Take Photos                                                                                                                      https://developer.android.com/training/camera/photobasics#java )

 

아울러 Camera가 CameraEX 로 발전이 되었는데 zheld 코딩 측면에서는 동일하다. 즉 예전의 Camera 가 CameraX가 되었다는 점이다. CameraX에서는 머신러닝에 의한 객체 인식을 지원한다는 점에 유의하고 구글 텐서플로우 홈페이지의 Tensorflow Lite 를 방문하면 객체감지를 비롯한 머신러닝 코드를 안드로이드 폰에 porting 하는 예제들이 제공되고 있다.

 

물론 Camera 의 세부 기능 자체를 코딩하는 것은 아니고 스마트 폰 Camera 기능 자체를 ON 시켜 필요한 작업을 할 수 있도록 한다.

 

이 예제는 다음의 url 주소에서 activity_main.xml 코드와 MainActivity.java 코드를 각각 복사할 수 있다.

Android Camera App with Examples

https://www.tutlane.com/tutorial/android/android-camera-app-with-examples

 

  

 

reslayout에 포함되어 있는 activity_main.xml 코드는 단말기의 화면 구성 레이아웃을 설정한다. 카메라 레이아웃은 카메라 화면을 하나의 ImageView 로 설정하고 그 하단에 사진 촬영을 위한 버튼 즉 Take a Photo 버튼을 배치한다. 그 다음부터는 스미트폰 자체 내장 카메라 기능을 사용하면 된다. 즉 버튼을 눌러 사진 촬영이 이루어지면 하단에 이미지를 저장할 것인지 아닌지를 결정하는 2개의 선택용 버튼 2개가 나타난다. 저장 버튼을 누르면 Gallery에 실제 저장되는 것은 아니고 저장하는 체 흉내만 내고 아니면 이미지를 버린 후 다시 카메라 모드로 돌아간다.

 

activity_main.xml에서 RelativeLayout이 사용되고 있으며 ImageView의 크기를 감안한 위치에 상대적으로 버튼을 배치하고 있다. ImageViewandroid:layout_above 명령을 살펴보면 Relative 배치를 사용하는 이유가 이해가 될 것이다. 만약 RelativeLinear 로 바꾼다면 상대적으로 배치된 버튼 위치를 사용할 수 없어 원점 위치로 버튼이 이동해 버리지만 그래도 버튼은 작동이 된다. 한편 Button에서 idbtnTakePicure이며 TextView에서 idcapturedimage 인데 이들은 MainActivityInstance 코딩에서 불러 사용된다.

 

MainActivity.java 라이브러리에서 카메라 사용을 위한 위젯 라이브러리들이 추가되어 있다. 위젯은 항상 데이터 입출력과 연관되어 있음에 유의하자.

 

안드로이드 코딩의 MainActivity.xml 에서 항상 나타나는 public class MainActivity ....  는 아두이노의 헤더 영역+void setup( )+loop( ) 정도로 보면 될 것이다. 왜냐면 필요한 것들은 죄다 코딩 할 수 있기때문이다.

private 은 선언되는 calss 내부에서 통용되기 때문에 아두이노의 local  선언과 유사하다. 

아울러 안드로이드 자바 버전에서 상수 선언은 항상 static final int ...  형식을 취하며 선언되는 파라메터는 코드 실행 전체에 걸쳐 상수로 이용된다.

 

MainActivity @overide에 관해서 살펴보자. overide 란 앞 단계를 마치고 이어지는 즉 overide 되는 다음 단계에서의 실행 내용을 담고 있다. 현재의 Camera 코드에는 다음의 2개의 overide 만 들어 있다

 

첫 번째 overide에서 2개의 parent를 생성한다. 하나는 btnCapture이고 다른 하나는 imgCapture 이다. btnCapture를 상속받은 setOnClickListner명령에 의해서 버튼이 눌러지면 MediaStore.Action_Image_Capture API에 의해 이지미를 캡춰하는 Activity가 실행되는데 intent 이므로 startActivityForResult 명령에 의해 타 Activity에 정보를 넘겨주게 된다.

 

protected void onCreate 하의 super.onCreate(savedinstanceState); 에서 super 는 파이선 코딩에서도 볼 수 있듯이 현재 메서드로 볼 수 있는 onCreate( )의 외부의 함수나 메서드로부터의 변수 값들을 불러 사용하겠다는 표현으로 보면 된다.

아울러 setContentView(R.layout.activity_main);에서 R... 은 activity_main.xml 전체를 조회(reference?)한다는 의미로 보면 될 것이다. 

 

두번째 overide 에서는 Take a Photo  버튼을 눌러 사진을 찍었는지 확인하기 위해서변수 request_code 값이 1 인지 확인해야 한다. 확인이 되면 resultCode 가 RESULT_OK 와 같은지 체크하고 bitmap 이미지를 확보한다.

MainActivity의 이런 내용을 초보자가 처음부터 코딩하기는 어렵지만 유사한 Camera 코딩을 학습하다보면 자연적으로 코딩 능력 배양이 가능할 것이다.

  

현재까지 외부 url 로부터 복사 붙여 넣기 하여 준비한 코드를 파일 탭의 Export To Zip File... 명령을 사용하여 압축 파일로 경로를 주어서 저장하자.

 

 

첨부된 Camera.zip AndroidStudioProjects 폴더에 다운받아서 안드로이드 스튜디오에서 열어 코드를 살펴보고 스스로 빌드해 보자. 계산기와 마찬가지로 외부 url 주소에서 activity_main.xml MainActivity.java를 가져다 자신의 안드로이드 스튜디오 코드를 완성하고 빌드하여 연습을 완료하자. 이러한 연습을 되풀이 하는 이유는 익숙해지기 위함이다.

 

Camera.zip
0.13MB

 

Camera.zip
0.13MB