1

Display.getRotation()根据 Google 的这篇有用的博客文章,我正在使用该方法来确定我的应用程序中屏幕的当前方向:

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

简而言之,我有一个绘图应用程序,允许用户在屏幕上绘制形状等,并且绘图画布需要保持相同的方向,但我仍然希望选项菜单等翻转到正确的位置用户是否以及何时开始以不同的方向使用设备进行绘图。

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

有趣的是,标题栏和选项菜单确实会翻转……所以不确定它们是从哪里获得方向的。如果用户随后开始绘图,则后续调用会onDraw()获取正确的旋转值,并且绘图会回到正确的位置,但正如您可以想象的那样,这有点令人不安/烦人。有什么应对策略吗?

谢谢。

4

2 回答 2

1

您可以尝试使用 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; }
}
于 2011-03-04T20:57:10.220 回答
0

使用 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>
                }  
            }
        }
    };
于 2011-07-10T14:04:03.390 回答