[Android Camera]關於Android Camera Orientation的一些總結
阿新 • • 發佈:2019-02-19
近日來,一直學習Android Camera 的API, 希望自己可以訂製一個Camera 應用.
經過學習和實踐, 關於攝像頭 橫豎屏的問題,弄了很長時間,網上看了很多方法,都一一實踐.這裡做個總結.
首先安全開啟攝像頭,這裡就不多說了
mCamera = Camera.open(id);
一. 設定preview 橫豎屏
使用的方法是:
mCamera.setDisplayOrientation(int degrees);
橫豎屏切換完整程式碼:
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Configuration mConfiguration = getResources().getConfiguration(); int ori = mConfiguration.orientation; if (ori == Configuration.ORIENTATION_LANDSCAPE){ mCamera.setDisplayOrientation(0); }else if (ori == Configuration.ORIENTATION_PORTRAIT){ mCamera.setDisplayOrientation(90); } //mCamera.setDisplayOrientation(90);//設定preview 90度 轉 try { mCamera.setPreviewDisplay(mHolder); } catch (IOException e) { e.printStackTrace(); } mCamera.startPreview(); }
到此為止,只能使preview 正常, 但是錄下的視訊依然是-90顯示. 下面來解決錄下視訊的問題:
使用方法:
mediaRecorder.setOrientationHint(90);
完整程式碼:
public void recordvideo(){ try { mCamera.unlock(); File videofile = new File(Environment.getExternalStorageDirectory() + "/test/", System.currentTimeMillis() + ".mp4"); mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(mCamera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P)); mediaRecorder.setOutputFile(videofile.getAbsolutePath()); mediaRecorder.setOrientationHint(90);//不改變preview,只對錄下來的是視訊起作用. mediaRecorder.prepare(); mediaRecorder.start(); Log.e(TAG,"START RECORDING"); }catch (Exception e){ Log.e("huashuo","can't record"); e.printStackTrace(); }
總結:
setDisplayOrientation, 改變設定preview
mediaRecorder.setOrientationHint(90);//不改變preview,只對錄下來的是視訊起作用.
當然,最簡單的辦法是在AndroidManifest.xml中配置android:screenOrientation="portrait", 然後設定mediaRecorder.setOrientationHint(90)
P.S 此方法在原生android4.4上測試通過.