Android:屏幕方向报告太慢?

问题描述:

我使用Display.getRotation()方法来确定我的应用程序在屏幕的当前方向,每本有帮助的博客条目从谷歌:Android:屏幕方向报告太慢?

http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html

概括地说,我有一个绘图应用程序,允许用户绘制形状等到屏幕上,并且绘图画布需要保持在相同的方向,但我仍然想要选项菜单等,以便当用户开始绘制与设备不同方向。

onDraw()对于画布,我请求从getRotation()的方向,然后将画布旋转回“0”位置,以便从最终用户的角度来看,画布不会移动。像魅力除了如果用户快速翻转设备非常 ...然后getRotation()报告旋转0,并因此画布不旋转回来,使绘图出现翻转或转动。

有趣的是,标题栏和选项菜单翻转...所以不知道他们从哪里获取方向。如果用户开始绘制,随后调用onDraw()将获得正确的旋转值,并且绘图返回到正确的位置,但您可以想象它有点令人不安或令人讨厌。任何处理这个问题的策略?

谢谢。

+0

我很想看到这个答案。我的应用遇到类似问题。 – 2011-04-26 20:34:36

你可以尝试使用getOrientation()来代替......我不确定你的问题源于哪里,但是谁知道它可以给你一个不同的结果。

Display myDisplay = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();   
int rotation = myDisplay.getOrientation(); 
switch (rotation) { 
    case Surface.ROTATION_0: { doSomething(); break; } 
    case Surface.ROTATION_90: { doSomething(); break; }     
    case Surface.ROTATION_270: { doSomething(); break; }      
    case Surface.ROTATION_180: { doSomething(); break; } 
} 
+0

坏主意。 'getOrientation'已被弃用。 – EboMike 2011-03-04 22:11:19

使用onOrientationChanged()。它以度数返回当前角度。它似乎可靠地用于显示屏方向更改。我将角度转换为4个标准方向,如下所示:

myOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) 
    { 

     @Override 
     public void onOrientationChanged(int iAngle) 
     {       // 0 15 30 45 60 75, 90 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345 
      final int iLookup[] = {0, 0, 0,90,90, 90,90, 90, 90, 180, 180, 180, 180, 180, 180, 270, 270, 270, 270, 270, 270, 0, 0, 0}; // 15-degree increments 
      if (iAngle != ORIENTATION_UNKNOWN) 
      { 
       int iNewOrientation = iLookup[iAngle/15]; 
       if (iOrientation != iNewOrientation) 
       { 
       iOrientation = iNewOrientation; 
       <do something with new orientation> 
       } 
      } 
     } 
    };