2015-08-28 6 views
4

Я пробовал каждый способ выполнить мое желаемое поведение, но ничего не работает.Использование камеры в ландшафте, когда мое приложение находится в портрете

Мое приложение заперт в режиме портрета (я не хочу ландшафтную UI), но я хочу, чтобы иметь возможность переключить дисплей камеры, чтобы показать предварительный просмотр камеры в портретном и ландшафтном режиме в качестве альтернативы.

Мне не интересны съемки изображений.

Чтобы показать предварительный просмотр в портрете я просто сделать:

camera.setDisplayOrientation(90); 

и мой просмотр работает нормально, но, когда я пытаюсь показать предварительный просмотр камеры в ландшафтном режиме, я:

camera.setDisplayOrientation(0); 

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

Я перепробовал все так:

1) вращать камеру с parameters.setRotation(), но это влияет только окончательное изображение, сохраненное и не имеет ничего общего с предварительным просмотром;

2) комплект parameters.set("orientation", "landscape"), но это, кажется, не имеет эффекта (может быть, старая и еще не поддерживаемая команда?);

3) установить все возможные комбинации из перечисленных ниже способов, но ничего, единственный способ, чтобы эффективно вращать изображение происходит из камеры, кажется, физически повернуть мое устройство ...

Это практическая демонстрация того, что я имею в виду:

enter image description here

enter image description here

enter image description here

enter image description here

Как вы можете видеть, parameters.setRotation() сделать не эффект на предварительном просмотре, это правильно, когда в портрете, а просто повернуть в ландшафтном потому камера не вращается сама, а просто место портретное изображение повернуто.

Итак, есть ли способ показать предварительный просмотр камеры в ландшафте, когда приложение находится на портрете?

Спасибо.

+0

Вы видели этот вопрос - http: // stackoverflow.com/questions/16128608/camera-preview-is-in-portrait-mode-but-image-capture-is-rotated – Oleksandr

+0

@ Александр да, но, как я говорю в своем вопросе, моя проблема - это не окончательное сохраненное изображение (I 'm не интересуется захватом изображения), а просто предварительный просмотр. –

ответ

0

Проверьте этот метод, чтобы установить ориентацию камеры. Параметр orientation является Display.getRotation(), вы можете изменить установить его согласно вашему требованию .:

public void setCameraOrientation(int orientation) { 
    int orientationDegree = 0; 
    switch (orientation) { 
     case Surface.ROTATION_0: 
      orientationDegree = 0; 
      break; 
     case Surface.ROTATION_90: 
      orientationDegree = 90; 
      break; 
     case Surface.ROTATION_180: 
      orientationDegree = 180; 
      break; 
     case Surface.ROTATION_270: 
      orientationDegree = 270; 
      break; 
    } 
    int displayOrientation = (cameraInfo.orientation - orientationDegree + 360) % 360; 
    camera.setDisplayOrientation(displayOrientation); 
    Camera.Parameters parameters = camera.getParameters(); 
    parameters.setRotation(displayOrientation); 
    camera.setParameters(parameters); 
} 

Для всего контекста проверить мою камеру демонстрационное приложение here. В частности, CameraPreview класс.

+0

** мое приложение заблокировано в портрете **, и, как я говорю в своей ** точке 1 **, 'parameters.setRotation()' не влияет на изображение предварительного просмотра, только в финальном захвате. Я обновил свой вопрос с практическими демонстрациями. –