일상에서 멍때리기

[Android] 화면 전환시 이벤트 받기 본문

프로그래밍/삽질로그

[Android] 화면 전환시 이벤트 받기

로 얄 2014. 4. 14. 23:35
반응형

Landscape와 Portrait로 전환시 이벤트를 받아오는 방법에 대한 코드

 1     public void onConfigurationChanged(Configuration newConfig) {
 2         super.onConfigurationChanged(newConfig);
 3         if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) // 세로 전환시 발생 
 4         { 
 5             System.out.println("portrait!!!!로 전환!!=========");
 6         } 
 7         else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) // 가로 전환시 발생 
 8         { 
 9             System.out.println("Landscape!!!!로 전환!!!=========");
10         }   
11     }

위와 같이 onConfigurationChanged이벤트를 받아 처리하면 됩니다.

만약 처음 화면에서 Landscape인지 Portrait인지 알아오고 싶다면 onCreate에 다음의 코드를 넣어주면 됩니다.

1         if ( this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) // 세로 
2         { 
3             System.out.println("portrait!!!!=========");
4         }
5         else // 가로
6         { 
7             System.out.println("Landscape!!!!=========");
8         }

화면의 정확한 방향을 알아오는 방법

하지만 위의 방법에는 문제점이 있습니다. 
기본 portrait에서 왼쪽으로 Landscape한 것과 오른쪽으로 Landscape를 한것의 구분을 할 수 가 없습니다..
이를 구분할 수 있는 방법은 아래의 함수를 구현함으로써 알 수 있습니다. 단 api버전에 따라 아래와 같이 나눠집니다.

2.1 이하

1     public int GetCurrentRotation()
2     {
3         WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
4         Display display = windowManager.getDefaultDisplay();
5         return display.getOrientation();
6     }


getRotationI()함수가 2.2부터 구현이 되어있기 때문에 2.1이하 에선 방향만 알 수 가 있습니다.

2.2 이상

1     public int GetCurrentRotation()
2     {
3         WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
4         Display display = windowManager.getDefaultDisplay();
5         return display.getRotation();
6     }

위의 반환 값인 int이며 각각의 해당 값은 아래와 같습니다.

  • Surface.ROTATION_0
  • Surface.ROTATION_90
  • Surface.ROTATION_180
  • Surface.ROTATION_270

또 다른 문제접

허나 모든것이 되는 것 처럼 보이지만 사실 문제점이 하나 있습니다.
그것은 90->270과 같이 같은 방향에 대한 화면전환시의 이벤트가 onConfigurationChanged에서 들어오지 않는 다는 것입니다.



반응형
Comments