2012-05-18 83 views
13

我正在使用相機僅顯示預覽(不拍照或錄製視頻)。Android:肖像模式下的相機預覽方向

該應用程序始終處於肖像模式(橫向模式被禁用)。 相機預覽總是旋轉90度逆時針,我不能 (既不setDisplayOrientation也不與p.set("orientation", "portrait")p.set("rotation", 90))改變它。

是預覽一直轉動,這樣還是設備相關?如果是一直喜歡這在肖像模式下,我可以在之後旋轉圖像。

或者有沒有辦法正確設置相機?我已經閱讀了很多關於此的線程,但沒有答案爲我工作(Galaxy s2,Android v2.3)

+0

僅供參考我的三星YP-G70(Galaxy player 5.0)一直處於橫向模式。 – cliff2310

+1

http://stackoverflow.com/questions/8475532/android-camera-in-view-with-buttons-and-text-over 希望這將幫助你.. –

回答

31

強制縱向:

AndroidManifest.xml設置android:screenOrientation="portrait",並呼籲camera.startPreview();

我還沒有在GS2測試,但它的工作原理每次我都測試了手機上之前調用camera.setDisplayOrientation(90);。在API Level 8

+0

這個工程在模擬器上而不是在我的GS2。但如果我理解正確,攝像機總是必須在縱向模式下旋轉90°,這是否正確?因爲那我會自己旋轉它。這將是一個更好的方式無論如何,因爲它會在低於8的API級別工作。 – DominicM

+1

**這不適用於三星Ace **,這裏我發佈了問題http://stackoverflow.com/questions/19176038/camera- setdisplayorientation-function-is-not-working-for-samsung-galaxy-ace-wi – swiftBoy

+0

它不必旋轉90度始終。在這裏看到答案:http://stackoverflow.com/questions/4697631/android-screen-orientation – Sonhja

5

加入setDisplayOrientation我已經編碼只肖像模式的應用程序:

注意。

camera.setDisplayOrientation(90); 

將相機旋轉到90度,這可能會導致不適合定位於Android的 一些設備爲了獲取所有Android設備的正確預覽使用下面的代碼,在審閱開發者網站。

下面,你必須把你的活動,cameraId =後面是0和前置攝像頭爲1

public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) { 
    android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, info); 
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
    int degrees = 0; 
    switch (rotation) { 
     case Surface.ROTATION_0: 
      degrees = 0; 
      break; 
     case Surface.ROTATION_90: 
      degrees = 90; 
      break; 
     case Surface.ROTATION_180: 
      degrees = 180; 
      break; 
     case Surface.ROTATION_270: 
      degrees = 270; 
      break; 
    } 

    int result; 
    //int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
     // do something for phones running an SDK before lollipop 
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
      result = (info.orientation + degrees) % 360; 
      result = (360 - result) % 360; // compensate the mirror 
     } else { // back-facing 
      result = (info.orientation - degrees + 360) % 360; 
     } 

    camera.setDisplayOrientation(result); 
} 

這是如何設置setDisplayOrientation相機這將完全適用於所有的Android設備。