Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:屏幕定向报告太慢?_Android_Canvas_Screen Rotation - Fatal编程技术网

Android:屏幕定向报告太慢?

Android:屏幕定向报告太慢?,android,canvas,screen-rotation,Android,Canvas,Screen Rotation,我正在使用Display.getRotation()方法来确定我的应用程序中屏幕的当前方向,根据谷歌的以下有用博客条目: 简而言之,我有一个绘图应用程序,允许用户在屏幕上绘制形状等,绘图画布需要保持相同的方向,但我仍然希望在用户开始以不同方向使用设备绘图时,将选项菜单等翻转到正确的位置 在画布的onDraw()中,我从getRotation()请求方向,然后将画布旋转回“0”位置,以便从最终用户的角度来看,画布永远不会移动。除了用户快速翻转设备外,它的工作方式就像一个符咒。。。然后getRot

我正在使用
Display.getRotation()
方法来确定我的应用程序中屏幕的当前方向,根据谷歌的以下有用博客条目:

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

在画布的
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; }
}

您可以尝试改用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>
                }  
            }
        }
    };
myOrientationEventListener=新方向EventListener(此为SensorManager.SENSOR\u DELAY\u正常)
{
@凌驾
公共空间方向改变(国际互联网)
{                         // 0  15 30 45 60 75, 90 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345
最后一个int-iLookup[]={0,0,0,90,90,90,90,180,180,180,180,180,270,270,270,270,270,270,0,0};//15度增量
如果(iAngle!=方向未知)
{
int INEWORIENTION=iLookup[iAngle/15];
if(IoOrientation!=IoOrientation)
{
iOrientation=无方向感;
}  
}
}
};
使用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>
                }  
            }
        }
    };
myOrientationEventListener=新方向EventListener(此为SensorManager.SENSOR\u DELAY\u正常)
{
@凌驾
公共空间方向改变(国际互联网)
{                         // 0  15 30 45 60 75, 90 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345
最后一个int-iLookup[]={0,0,0,90,90,90,90,180,180,180,180,180,270,270,270,270,270,270,0,0};//15度增量
如果(iAngle!=方向未知)
{
int INEWORIENTION=iLookup[iAngle/15];
if(IoOrientation!=IoOrientation)
{
iOrientation=无方向感;
}  
}
}
};

坏主意
getOrientation
已被弃用。这不是个好主意
getOrientation
已被弃用。我很想看看这个问题的答案。我在我的应用程序上遇到了类似的问题。我希望看到这个问题的答案。我的应用程序也遇到类似问题。