안녕하세요 안드로이드 스튜디오로 개발공부를 하고있는 학생입니다
제가 카메라로 녹화기능을 구현하는도중에 녹화버튼만누르면 화면이 90도 꺾인채로 보여지고 저장은 정방향으로 잘 됩니다 간단하게 간추려보았습니다 도움을주시면 감사하겠습니다
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_camera);
//Create a surface view, assign it to the holder, and add it to the frame.
surface = new SurfaceView(this);
init();
frame.addView(surface);
btnRecord.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
if (recorder == null) {
recorder = new MediaRecorder();
}
//In the recorder, put in the items that I need to put
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
filename = createFilename();
Log.d(TAG, "current filename : " + filename);
recorder.setOutputFile(filename);
recorder.setPreviewDisplay(holder.getSurface());
recorder.setOrientationHint(90);//서페이스뷰랑 녹화랑 동일한화면으로 저장됨 0일경우 기본이 90도꺾이기때문 90으로놓으면 저장만잘됨
recorder.prepare();
recorder.start();
} catch (Exception ex) {
Log.e(TAG, "Exception : ", ex);
recorder.release();
recorder = null;
}
}
});
//카메라를 켜주고 홀더랑 연결을 해줌
private void init() {
//Default status camera
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
// surfaceview setting
holder = surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
// 서페이스뷰 오버라이드
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
mCamera = Camera.open(); //객체생성
Camera.Parameters parameters = mCamera.getParameters(); //객체 파라미터 얻음
}
// Called when the size of the SurfaceView changes
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int w, int h) {
if (mCamera != null) {
try {
mCamera.setDisplayOrientation(90);
mCamera.setPreviewDisplay(holder); //프리뷰 디스플레이 담당한 서피스 홀더 설정
} catch (IOException e) {
e.printStackTrace();
}
Camera.Parameters parameters = mCamera.getParameters();
//프리뷰 사이즈 값 재조정
parameters.setPreviewSize(1280, 720);
mCamera.setParameters(parameters);
//프리뷰 재시작
mCamera.startPreview();
}
}
//SurfaceView is called on exit
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if (mCamera != null) {
// Exit Camera preview
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}