Что такое эквивалент API Camera2 для setDisplayOrientation()?
С android.hardware.Camera
, чтобы выход камеры надлежащим образом отслеживал движение устройства, нам нужно подключить OrientationEventListener
к методу setDisplayOrientation()
на Camera
. Таким образом, когда пользователь поворачивает устройство вокруг, мы можем сохранить то, что "вверх" на предварительном просмотре камеры, синхронизируется с тем, что "вверх" в реальном мире. Это особенно справедливо для вращения устройства вокруг оси Y (т.е. Переброса из ландшафта в обратный пейзаж или обратно).
Для большинства изменений ориентации API android.hardware.camera2
, похоже, "работает". Однако для этого поворота оси Y (пейзаж → реверс-пейзаж или наоборот) предварительный просмотр камеры завершается инвертированием.
Что эквивалентно вызову setDisplayOrientation()
в Camera
для Camera2 API, поэтому мы можем справиться с этим сценарием?
Ответы
Ответ 1
Как вы заметили, это должно "работать" только для SurfaceView
в API камеры2.
Таким образом, нет эквивалента setDisplayOrientation()
.
Мы до сих пор не слышали об этой проблеме, поэтому несколько вопросов:
- У вас есть приложение, заблокированное для пейзажа, или вы разрешаете изменения ориентации?
- Выполняете ли вы свои собственные изменения ориентации или у вас разорвана сфера и перезагрузите приложение при изменении ориентации?
- Вы запускаете какой-либо повторный макет, когда происходит поворот на 180 градусов, например, чтобы отрегулировать, где находится кнопка спуска затвора?
Ответ 2
используйте CaptureRequest JPEG_ORIENTATION, чтобы настроить ориентацию дисплея
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, 90)
Ответ 3
используйте приведенную ниже формулу, чтобы получить поворот устройства.
private int getOrientation(int rotation) {
return (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360;
}
SensorOrientation - это поле, назначенное из
characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION)
Решение, предлагаемое инженером google: yaraki
https://github.com/googlesamples/android-Camera2Basic/issues/24
Ответ 4
Нет.
Он не "работает", если ориентация дисплея менялась местами по сравнению с ориентацией датчика (на большинстве устройств это имеет место в портретном режиме), потому что вам нужно установить соотношение сторон < 1 для вашей поверхности предварительного просмотра, которую камера2 не может сопоставить с подходящим размером вывода. Решение: