android map 自动旋转

标签 android google-maps autorotate

如果您打开 Google map 应用程序,屏幕右上角有一个按钮,您可以按下该按钮将 map 置于您当前位置的中心。然后按钮的图标会发生变化。如果您再次按下相同的按钮, map 会根据您的指南针方向自动旋转。换句话说, map 变得以 self 为中心(而不是以 self 为中心,AKA 总是向上)。

Google 最近推出了适用于 Android 的 map API V2,我当然比旧版本更喜欢它。默认情况下,android maps V2 将包含“center on location”按钮。但是,多次按下它不会启用自动旋转;它只是尝试将 map 再次以您的位置为中心。

有谁知道我可以像谷歌地图应用一样使用 map API v2 自动旋转 map 吗?我必须自己实现这个功能,还是在 API 中,我只是没有看到它?感谢所有帮助。

最佳答案

好的,这就是我认为应该在一年后完成的方式。如果您发现任何问题,请纠正我。

以下大部分代码都处理坐标系之间的差异。我正在使用旋转矢量传感器。来自文档:Y 在设备当前位置与地面相切并指向磁北。 另一方面,在谷歌地图中的方位似乎指向真北。 this page shows how the conversion is done

1) 从您当前的 GPS 位置获取当前磁偏角

@Override
public void onLocationChanged(Location location) {
    GeomagneticField field = new GeomagneticField(
            (float)location.getLatitude(),
            (float)location.getLongitude(),
            (float)location.getAltitude(),
            System.currentTimeMillis()
        );

    // getDeclination returns degrees
    mDeclination = field.getDeclination();
} 

2) 根据偏角和磁北计算方位

    @Override
public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
        SensorManager.getRotationMatrixFromVector(
                mRotationMatrix , event.values);
        float[] orientation = new float[3];
        SensorManager.getOrientation(mRotationMatrix, orientation);
        float bearing = Math.toDegrees(orientation[0]) + mDeclination;
        updateCamera(bearing);  
    }
}

3) 更新 map

private void updateCamera(float bearing) {
    CameraPosition oldPos = mMap.getCameraPosition();

    CameraPosition pos = CameraPosition.builder(oldPos).bearing(bearing).build();
            mMap.moveCamera(CameraUpdateFactory.newCameraPosition(pos));
}

关于android map 自动旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320015/

相关文章:

java - 它是否可以节省更多内存并且重用回收器 View 是否更有效?

android - 自定义 myLocation Google map v2 Android 的标记

javascript - 地理坐标附近的 Google 用户图像

ios - 在 7.3/9/2+ Swift 中,设备旋转时如何禁用旋转动画?

ios - 自动布局和设备方向

objective-c - UIApplication _preferredInterfaceOrientationGivenCurrentOrientation : SIGABRT

java - 获取设备正常运行时间的正确方法是什么?

android - 如何使用phonegap知道Android中创建的目录在哪里?

Android AlarManager 通知重复

ios - 我们应该如何快速在谷歌地图上放置标记?