2012-05-18 3 views
13

Я использую камеру, чтобы показывать только предварительный просмотр (не снимать или записывать видео).Android: ориентация предварительного просмотра камеры в портретном режиме

Приложение всегда в портретном режиме (режим ландшафта отключен). Предварительный камера всегда поворачивается на 90 градусов против часовой стрелки, и я не могу изменить его (ни с setDisplayOrientation ни с p.set("orientation", "portrait") и p.set("rotation", 90)).

ли предварительный просмотр всегда поворачиваются так, или это зависит от устройства? Если это было всегда это в портретном режиме, я мог бы просто повернуть изображение потом.

Или есть способ правильно настроить камеру? Я читал много потоков об этом, но никакой ответ не работал для меня (Galaxy s2, Android v2.3)

+0

FYI Мой Samsung YP-G70 (Galaxy Player 5.0) всегда находится в ландшафтном режиме. – cliff2310

+1

http://stackoverflow.com/questions/8475532/android-camera-in-view-with-buttons-and-text-over Надеюсь, что это поможет .. –

ответ

31

Для ориентации на портрет:

установить android:screenOrientation="portrait" в вашем AndroidManifest.xml и вызвать camera.setDisplayOrientation(90); перед вызовом camera.startPreview();

Я не проверял на GS2, но он работает на каждом телефоне я опробована на.

Примечание: setDisplayOrientation был добавлен в API Level 8

+0

Это работает на эмуляторе, но не на мой GS2. Но если я правильно понял, камера ВСЕГДА должна быть повернута на 90 ° CW в портретном режиме, это правильно? Потому что тогда я сам поверну его. Это будет лучшим способом, так как он будет работать на уровне API ниже 8. – DominicM

+1

** Это не работает на Samsung 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

Я закодирован приложение для только портретного режима.

camera.setDisplayOrientation(90); 

Сделает камеры, чтобы повернуть на 90 градусов, и это может привести к не подходящей ориентации для некоторых устройств андроида Для того, чтобы получить правильный Preview для всех 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 устройств.

 Смежные вопросы

  • Нет связанных вопросов^_^