在surfaceView中绘制图标

时间:2013-05-12 09:21:54

标签: android surfaceview

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

最近我测试了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;
    }

1 个答案:

答案 0 :(得分:1)

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

你需要找出'正常'是什么。 有一种更好的方法可以做到这一点,但是“快速而肮脏”的方法是用display.getSize(Point point)检查显示器的宽度和高度 - 如果宽度大于高度,那么'正常'模式是风景,否则是肖像。然后你可以看一下旋转,看看当前的旋转与那个不同。