Android:屏幕方向报告太慢了?

我使用
Display.getRotation()
方法确定我的应用程序中屏幕的当前方向,根据Google提供的这个有用的博客条目: http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html 简而言之,我有一个绘图应用程序,允许用户在屏幕上绘制形状等,绘图画布需要保持相同的方向,但我仍然想要选项菜单等,以翻转到正确的位置用户是否以及何时开始使用不同方向的设备进行绘图。 在画布的
onDraw()
中,我从
getRotation()
请求方向,然后将画布旋转回“0”位置,以便从最终用户的角度来看,画布永远不会移动。如果用户非常快速地翻转设备,则可以像魅力一样工作...然后
getRotation()
报告旋转为0,因此画布不会向后旋转,从而使图形显示为翻转或转动。 有趣的是,标题栏和选项菜单确实翻转......所以不确定它们从哪里获取方向。如果用户随后开始绘制,则随后对
onDraw()
的调用将获得正确的旋转值并且绘图将返回到正确的位置,但是您可以想象它有点令人不安/恼人。处理这个问题的任何策略? 谢谢。     
已邀请:
您可以尝试使用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; }
}
    
使用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>
                }  
            }
        }
    };
    

要回复问题请先登录注册