Android 2.2. Портретная камера Предварительный просмотр - PullRequest
2 голосов
/ 29 марта 2012

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

Мне нужно только поддерживать API уровня 8 (Android версия 2.2) и выше, поэтомуЯ могу использовать Camera.setDisplayOrientation , чтобы установить ориентацию, и документы API для этого метода включают функцию setDisplayOrientation, которая делает то, что я хочу.Единственная проблема состоит в том, что он использует API Level 9 Camera.CameraInfo , чтобы получить ориентацию камеры относительно устройства (предположительно для работы с альбомными и портретными устройствами).

Такбезопасно ли предположить, что я могу сделать setDisplayOrientation (90) для всех устройств уровня 8 и просто использовать CameraInfo.orientation для более новых устройств?

Ответы [ 3 ]

2 голосов
/ 02 июня 2012

Я попробовал следующее в HTC Evo Shift с проектом, настроенным на API8 (отлично работал):

Configuration cfg = mContext.getResources().getConfiguration();
if (cfg.orientation == Configuration.ORIENTATION_PORTRAIT) {
    mCamera.setDisplayOrientation(90);
}
1 голос
/ 24 апреля 2012

В качестве продолжения для всех, кто обнаружил это - я не нашел однозначного ответа на этот вопрос, поэтому я сделал, как я предложил выше (setDisplayOrientation (90)) для устройств 2.2 и выпустил приложение.У него было около 70000 загрузок и нет сообщений о неправильном повороте экрана камеры на 90 градусов, поэтому, похоже, это разумное решение.

0 голосов
/ 30 марта 2012

Я публикую ссылку на справку Android-разработчиков по вопросам, связанным с камерой: http://developer.android.com/guide/topics/media/camera.html

По поводу вашего конкретного вопроса, я взглянул на API и, думаю, так как вызывается метод surfaceChangedкаждый раз, когда производится изменение поверхности и оборудование имеет только 2 положения, вы, вероятно, правы, поскольку вы применяете исправленные методы в методе SurfaceChanged.Попытайтесь реализовать это, и если вы не можете заставить его работать, опишите проблему, и я постараюсь помочь вам.

...