Android Camera SurfaceView Ориентация - PullRequest
0 голосов
/ 24 марта 2011

Я создаю приложение, которое использует камеру Android. Я использую FrameLayout, который имеет 2 детей. Первый дочерний элемент - это SurfaceView, который просматривает камеру, а второй дочерний элемент - LinearLayout с некоторыми кнопками.

Я читал, что в Android 2.1 и ниже единственный способ использовать камеру - это альбомный режим, поэтому я использую android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation" в моей деятельности в файле манифеста.

Есть ли способ использовать SurfaceView (камеру) только в ландшафтном режиме и использовать LinearLayout (кнопки) в горизонтальной или вертикальной ориентации?

(Например, в Google Goggles камера не меняет ориентацию, но кнопки меняются при изменении ориентации.)

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Приложение камеры, включенное в Android, находится в AOSP.Проверьте источник для себя.Судя по всему, он также исправлен в ландшафтном режиме, но просто поворачивает ImageViews, когда пользователь меняет ориентацию.

См. эта часть источника камеры.

1 голос
/ 21 октября 2011

Лучший способ решить проблему, как это делает AOSP, - использовать RotateImageView и специальный ImageView, который позволяет устанавливать поворот в градусах. Таким образом, в вашей деятельности с камерой вы должны реализовать OrientationListener и onOrientationChanged, чтобы установить новые градусы для вашего RotateImageView. Вот простой способ, но вы можете найти лучший пример реализации камеры на

private class MyOrientationEventListener extends OrientationEventListener {
        public MyOrientationEventListener(Context context) {
            super(context);
        }

        @Override
        public void onOrientationChanged(int orientation) {


            mOrientation = roundOrientation(orientation);
            ((RotateImageView)findViewById(R.id.btnFlash)).setDegree(mOrientation);


        }
    }

    public static int roundOrientation(int orientation) {
        return ((orientation + 45) / 90 * 90) % 360;
    }
...