1

我的应用程序是一个增强现实应用程序,我在相机的中绘制图标。根据指南针的结果绘制的图标。应用程序被锁定在横向模式。在我的设备中,默认方向为纵向模式,一切正常。

最近我在 Galaxy Nexus 10 中测试了该应用程序,发现图标在我分别向右和向左移动设备时向上和向下移动。当我左右移动设备时会发生相反的情况。出了什么问题。我的猜测是,nexus 具有横向默认方向,问题来自 remapCoordinateSystem()。我在 remapCoordinateSystem 之前添加了下一个代码,但什么也没发生。

int defaultRotation = getRotation();
switch(defaultRotation){
    case Configuration.ORIENTATION_LANDSCAPE:
        SensorManager.remapCoordinateSystem(temp, SensorManager.AXIS_X,
                SensorManager.AXIS_MINUS_Z, rotation);
        break;
    case Configuration.ORIENTATION_PORTRAIT:
        SensorManager.remapCoordinateSystem(temp, SensorManager.AXIS_Y,
                SensorManager.AXIS_MINUS_Z, rotation);
        break;
}

 private int getRotation() {
    WindowManager lWindowManager =  (WindowManager) getSystemService(WINDOW_SERVICE);

    Configuration cfg = getResources().getConfiguration();
    int lRotation = lWindowManager.getDefaultDisplay().getRotation();

    if( (((lRotation == Surface.ROTATION_0) ||(lRotation == Surface.ROTATION_180)) &&   
    (cfg.orientation == Configuration.ORIENTATION_LANDSCAPE)) ||
    (((lRotation == Surface.ROTATION_90) ||(lRotation == Surface.ROTATION_270)) &&    
    (cfg.orientation == Configuration.ORIENTATION_PORTRAIT))){

      return Configuration.ORIENTATION_LANDSCAPE;
      }     

      return Configuration.ORIENTATION_PORTRAIT;
    }
4

1 回答 1

1

getRotation() 告诉您设备是如何相对于它的“正常”方向旋转的。

你需要弄清楚什么是“正常”。可能有更好的方法来做到这一点,但“快速而肮脏”的方法是使用 display.getSize(Point point) 检查显示器的宽度和高度 - 如果宽度大于高度,则为“正常”模式是横向的,否则是纵向的。然后您可以查看旋转以了解当前旋转与当前旋转有何不同。

于 2013-05-12T15:14:17.847 回答