我的应用程序是增强现实应用程序,我在相机的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;
}
答案 0 :(得分:1)
getRotation()告诉您设备如何相对于它的“正常”方向旋转。
你需要找出'正常'是什么。 有一种更好的方法可以做到这一点,但是“快速而肮脏”的方法是用display.getSize(Point point)检查显示器的宽度和高度 - 如果宽度大于高度,那么'正常'模式是风景,否则是肖像。然后你可以看一下旋转,看看当前的旋转与那个不同。