2013-03-04 2 views
0

Это просто, чтобы зафиксировать ориентацию на портрет или пейзаж.Событие изменения ориентации захвата до его возникновения

<activity android:name=".MyActivity" 
      android:screenOrientation="portrait"> 

или для захвата, когда экран вращается:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

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

+0

'что происходит на моем макете, если ...'. Это традиционно делается путем сохранения состояния активности, а затем воссоздания его из этого состояния. –

ответ

2

Используйте этот кусок кода в методе onPause(). Когда rotatio изменяется, activity переконвертирует его сам, что означает, что on-Create вызывается снова, а предыдущая активность - finish();

int currentOrientation = getResources().getConfiguration().orientation; 
    if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){ 
     if (display.getRotation() == Surface.ROTATION_0) 
     // play with different angles e.g ROTATION_90, ROTATION_180 
    } 

Таким образом, когда вращение меняет предыдущую Активность OnPause игровых() будет называться и на этом этапе вы можете решить, что вы хотите с новой ориентацией.

+0

Звучит как хорошее решение. Я пытаюсь это сделать. – caiocpricci2

0
  1. Force активность, чтобы остаться в одном режиме (например, альбомная) через setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); в onCreate(..)

  2. Приложить собственную ориентацию слушателя,

    orientationEventListener = новый OrientationEventListener (это, SensorManager.SENSOR_DELAY_UI) {

     @Override 
         public void onOrientationChanged(int orientation) { 
          if (Math.abs(orientation - 90) < 30){ 
            // your device orientation has changed, you can update UI      accordingly, (layout won't rotate). 
         } 
        }; 
        orientationEventListener.enable(); 
    

Имейте в виду, что если вы сделаете это, вы получите x & y обратная сторона осевых событий, когда вы отмените изменение конфигурации. Кроме того, если у вас есть панель навигации, она останется там, где она есть и не будет вращаться!

Смежные вопросы