【问题标题】:Orientation differences between Galaxy Tab and TransformerGalaxy Tab 和 Transformer 的方向差异
【发布时间】:2013-05-08 11:57:52
【问题描述】:

我使用前置摄像头和 min3d 库开发了一个增强现实应用程序。此应用程序在运行 Android 4.0.4 的三星 Galaxy Tab 10,1(第一代)上运行良好

但在装有 Android 4.1.1 的 ASUS Transformer TF700T 上测试相同的应用程序(仅限横向模式)会返回错误的方向,并且增强的世界不再与相机视图匹配。

以下代码用于获取 min3D 所需的方向向量 target_axis 和 up_axis:

SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); 
SensorManager.getOrientation(mR, mOrientation);
Number3d target_axis = new Number3d( -mR[2], -mR[5], -mR[8] );
Number3d up_axis = new Number3d( mR[1], mR[4], mR[7] );

mLastAccelerometer 和 mLastMagnetometer 是从 onSensorChanged(SensorEvent event)

接收的

谁能告诉我上面的代码是否仍然过多地依赖于设备?我希望使用 SensorManager 的 gerOrientation 调用这个解决方案应该适用于不同的设备?

【问题讨论】:

    标签: android orientation android-sensors min3d


    【解决方案1】:

    我的猜测是这与设备的方向有关,即纵向,横向,reversePortrait,reverseLandscape等。您发布的代码肯定过于幼稚,因为它没有考虑设备的旋转相对于其默认方向。使用类似下面的方法来计算方位角调整

    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    float screen_adjustment = 0;
    switch(rotation) {
        case Surface.ROTATION_0:   screen_adjustment =          0;         break;
        case Surface.ROTATION_90:  screen_adjustment =   (float)Math.PI/2; break;
        case Surface.ROTATION_180: screen_adjustment =   (float)Math.PI;   break;
        case Surface.ROTATION_270: screen_adjustment = 3*(float)Math.PI/2; break;
    }
    

    这是我在回答Android Compass that can Compensate for Tilt and Pitch 时使用的。其他人建议使用 SensorManager.remapCoordinateSystem(float[], int, int, float[]),具体取决于轮换数。

    【讨论】:

    • 啊,因为我拿这两个设备的方式相同,这表明 Galaxy Tab 的“默认”方向与 Asus Transformer 不同?
    • 我不确定这些设备,但我认为平板电脑的默认方向可以是横向,而手机的默认方向往往是纵向。
    【解决方案2】:

    最后,华硕Transformer Pad TF700的硬件出现了问题。在其他设备上,该应用程序按预期运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2012-06-22
      • 2018-01-18
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多