1. 程式人生 > >[Android Camera]關於Android Camera Orientation的一些總結

[Android Camera]關於Android Camera Orientation的一些總結

近日來,一直學習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上測試通過.