2011-01-21 2 views
2

Я пытаюсь сделать это, поэтому мое приложение никогда не переходит в портретный режим, но может переключаться между 2 видами пейзажного экрана. Я знаю, что это можно сделать легко в Gingerbread (2.3), но у меня возникли проблемы делать это вручную для других версий андроида, мой код выглядит следующим образом:Вращение экрана с использованием Display.getRotation()

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     int orientation = display.getRotation(); 
     if (orientation == 1) { 
      /* The device is rotated to the left. */ 
      Log.v("Left", "Rotated Left"); 
     } else if (orientation == 3) { 
      /* The device is rotated to the right. */ 
     Log.v("Right", "Rotated Right"); 
     } else { 

     } 

Моей проблема заключается в том, как я переворачивать й и y-ось экрана в зависимости от обнаруженного вращения? Как мне их схватить, чтобы отменить их?

ответ

2

Насколько я знаю, нет поддержки инвертированного макета до 2.3. Поэтому, если вы не рисуете экран с помощью специального SurfaceView, я бы сказал, что вы не можете сделать это, используя стандартные виджеты. С представлением поверхности вам просто нужно преобразовать весь холст перед его рендерингом.

Кроме того, вы должны использовать константы для того, чтобы узнать текущую ориентацию (никакой магии numuber), см getRotation Configuration class API documentation

if (orientation==Configuration.ORIENTATION_LANDSCAPE) 
+0

Должен быть способ установить оси x и y вручную? как ОС Android знает, чтобы сделать это самостоятельно? – SamRowley

+0

AFAIK невозможно, см. Http://www.mail-archive.com/[email protected]/msg124496.html (требуется разрешение, но недоступно в SDK) –

+0

можно вернуть аналогичное значение как метод getRotation(), но не в контексте отображения, поэтому, согласно акселерометру? – SamRowley

1

для класса 'Display' объясняется в https://developer.android.com/reference/android/view/Display.html#getRotation()

getRotation возвращается:

Surface.ROTATION_0 (no rotation), 
Surface.ROTATION_90, 
Surface.ROTATION_180, 
or Surface.ROTATION_270. 

Например, если устройство имеет естественный высокий экран, и пользователь повернул его на свою сторону, чтобы войти в al andscape, значение, возвращаемое здесь, может быть либо Surface.ROTATION_90, либо Surface.ROTATION_270 в зависимости от направления, в котором оно было повернуто. Угол - это поворот рисунка на экране, который является противоположным направлением физического вращения устройства. Например, если устройство повернуто на 90 градусов против часовой стрелки, для компенсации рендеринга будет повернуто на 90 градусов по часовой стрелке, и поэтому возвращаемое значение здесь будет Surface.ROTATION_90.

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