일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 앱기능설명
- 기획자역량
- 사용자중심기획
- Realm
- 데이터분석
- kotlin
- 해외여행데이터
- log
- eSIM
- 데이터해석능력
- 데이터활용능력
- firebase
- error
- 노코드활용
- 컴파일
- ethereum
- 글라이드로앱만들기
- 스트리밍
- 웹기획자
- Exception
- 기획자
- C
- 안드로이드
- 다윈
- convert
- test
- Glide
- Gradle
- 앱기획자
- Android
- Today
- Total
날마다 새롭게 또 날마다 새롭게
카메라 Preview 띄우기 본문
1. Manifest - 카메라를 사용하겠다는 Permission 받기
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
2. Main.java - Camera 객체 생성 및 영상 Preview 띄우기
// 미리보기 표면 클래스
class MyCameraSurface extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
① Surface Class 생성 (SURFACE_TYPE_PUSH_BUFFERS 설정)
public MyCameraSurface(Context context, AttributeSet attrs) {
super(context, attrs);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
② Camera 객체 생성 및 미리보기 설정
public void surfaceCreated(SurfaceHolder holder){
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
mCamera.release();
mCamera = null;
e.printStackTrace();
}
}
③ Surface 크기에 맞는 최적의 미리보기 크기 설정
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
Camera.Parameters params = mCamera.getParameters();
List<Size> arSize = params.getSupportedPictureSizes();
if(arSize == null){
params.setPreviewSize(width, height);
} else {
int diff = 10000;
Size opti = null;
for(Size s : arSize){
if(Math.abs(s.height - height)<diff){
diff = Math.abs(s.height - height);
opti = s;
}
}
params.setPreviewSize(opti.width, opti.height);
}
mCamera.setParameters(params);
mCamera.startPreview();
}
④ Surface 해제 시 카메라도 해제
public void surfaceDestroyed(SurfaceHolder holder){
if(mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
}
}