2011-03-24 2 views
0

Я создаю приложение, которое использует камеру Android. Я использую FrameLayout, у которого есть 2 ребенка. Первым ребенком является SurfaceView, который просматривает камеру, а второй - LinearLayout с некоторыми кнопками.Android Camera SurfaceView Ориентация

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

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

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

ответ

2

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

См. this part источника камеры.

1

Лучший способ решить - это как 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; 
    } 
Смежные вопросы