Mobile/Android(Java)

[Android/java] Camera 사용하기 (동적으로 ImageView 만들어서 Layout에 삽입하기)

개발왕 금골드 2020. 3. 23. 15:28
반응형

안녕하세요 골드입니다.

오늘은 Camera에 대해 글을 쓰도록 하겠습니다.

최근에 나온 Android 단말기는 99% 카메라를 장착하고 있습니다. Camera를 직접 만들어 쓸 수도 있겠지만 그것보다 Intent를 활용하여 Camera 앱에 접근하는 방식을 사용하여 조금 더 효율적이고 쉬운 방법으로 Camera를 사용할 수 있습니다.

 

먼저 Manifast 파일에 카메라 하드웨어 접근 권한을 추가합니다.

 

1. Camera Intent를 호출

MainActivity.class 파일에 Camera Intent를 호출해서 Camera 앱에 접근할 수 있도록 합니다.

startActivityForResult() 메서드로 카메라 Intent를 보냅니다.

두 번째 매개변수 값이 0보다 큰 값이라면 새로운 액티비티가 생성되면서 Intent가 실행됩니다.

resolveActivity()는 우리가 보낼 Intent에 의해 Activity가 실행 가능 여부를 확인합니다.

 

이제 생성한 메서드를 버튼 클릭이 활성화되었을 때 실행되도록 작성하겠습니다.

onCreate() 메서드에서 button을 참조한 후 우리가 만든 메서드를 클릭했을 때 실행되도록 작성합니다.

 

여기까지만 하고 실행을 하면 버튼을 눌렀을 때 카메라가 켜지는 것을 볼 수 있습니다.

 

다음은 이미지 미리보기를 가져와야 합니다.

 

미리보기를 가져오기 위해 onActivityResult 메서드를 오버라이드합니다. 

onActivityResult() 메서드에 전달된 반환 인텐트에서 "data" 키 아래 extras에 비트맵을 인코딩합니다.

imageView를 xml에 만들고 onCreate() 메서드에서 참조한 후 

imageView에 bitmap을 넣어줍니다.

 

실제 단말기에서 실행을 시켜 보았습니다.

사진이 너무 작긴 하지만 올라오는 모습을 볼 수 있습니다.

 

이번에는 ImageView를 동적으로 생성한 후 거기에 이미지를 넣겠습니다.

 

2. ImageView 동적 생성 후 Layout에 추가

먼저 activity_main.xml 파일입니다.

LinearLayout으로 감싸고 Button View하나를 추가했습니다.

각각 id를 추가했습니다.

 

1번에 onCreate() 메서드 코드에 imageView 참조 코드를 지우고 layout을 참조합니다.

다른 코드는 동일합니다.

 

onActivityResult()메서드 코드를 수정합니다.

앞서 참조한 imageView 객체에 bitmap이미지를 넣었지만,

이번에는 ImageView 객체를 직접 생성합니다.

생성한 ImageView에 비트맵 이미지를 넣어주고

필수로 선언되어야 하는 layout_width와 layout_height를 코드로 작성합니다.

이후 앞서 참조했던 layout에 addView 메서드를 사용하여 View를 추가해줍니다.

실제 단말에서 실행한 모습입니다. 이미지 사이즈가 이상하고 저장도 되지 않습니다.

이 부분은 후에 추가할 예정입니다.

 

 

가상 머신에서 실행하면 원하는대로 실행이 되지 않아 실제 단말에서 테스트했습니다.

 

여기까지 골드였습니다.

감사합니다.

 

참고자료 : 

https://developer.android.com/training/camera/photobasics#java

 

사진 촬영  |  Android 개발자  |  Android Developers

이 과정에서는 기존 카메라 애플리케이션을 사용하여 사진을 캡처하는 방법을 설명합니다. 클라이언트 앱을 실행하는 기기에서 촬영한 하늘 사진을 조합하여 세계 날씨 지도를 만드는 크라우드 소싱 날씨 서비스를 구현하고 있다고 가정하겠습니다…

developer.android.com

 

반응형