Android Maps v2 使用指南针旋转 mapView

Posted

技术标签:

【中文标题】Android Maps v2 使用指南针旋转 mapView【英文标题】:Android Maps v2 rotate mapView with compass 【发布时间】:2013-01-23 21:45:46 【问题描述】:

我正在开发一个需要用指南针旋转 mapView 的应用程序。我知道如何旋转相机,但我需要用指南针旋转 mapView。中心点应该是当前位置。我找到了 Maps V1 的代码,但我需要使用 Maps V2 来完成

【问题讨论】:

【参考方案1】:

好的,我自己想通了。首先,您需要从指南针计算方位。 然后可以旋转 Maps api-2 相机。

public void updateCamera(float bearing) 
            CameraPosition currentPlace = new CameraPosition.Builder()
                    .target(new LatLng(centerLatitude, centerLongitude))
                    .bearing(bearing).tilt(65.5f).zoom(18f).build();
            googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(currentPlace));

    

在您的代码中设置SensorListener 并在onSensorChanged 事件中调用此方法。我添加了一个倾斜值,因此地图将以 3D 旋转。

【讨论】:

并不是说它太重要了,但是 .bearing 是一个浮点数。 你是怎么得到方位的? 如果您使用的是 GoogleMap 而不是 MapView,您可以使用 mMap.setOnMyLocationChangeListener 事件。 我们如何在 V3 中做到这一点?请建议。另外,我发布了类似的问题,以便通过改变方位 3 次(每次 120 度以围绕中心点旋转 1 个周期)来旋转地图 360 度,但存在缓动和抽搐。我怎样才能避免这种情况。 ***.com/questions/48123738/… 如果您能展示一下您是如何获得轴承的,那当然会很好,如果信息非常重要。【参考方案2】:

在您的 GoogleMap 对象中,您可以访问 getMyLocation 方法。最后返回一个包含 getBearing 方法的 Location 对象。这个返回一个浮点数 [0..360],根据最后一个已知位置和当前位置计算,0° 是北轴,旋转是时钟感应。

要恢复,您可以使用如下代码:

GoogleMap gMap = ..... 
float bearing = gMap.getMyLocation().getBearing();
CameraPosition newCamPos = new CameraPosition(latLngObject,
            zoomValue,
            tiltValue,
            bearing);
gMap.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), durationValue, null);

【讨论】:

我们如何在 V3 中做到这一点?请建议。我也发布了类似的问题,以便通过改变轴承 3 次(每次 120 度围绕中心点旋转 1 个周期)来旋转地图 360 度,但是有缓动和抽搐。我怎样才能避免这种情况。 ***.com/questions/48123738/…

以上是关于Android Maps v2 使用指南针旋转 mapView的主要内容,如果未能解决你的问题,请参考以下文章

将 setRotation 应用于 Maps API v2

Android - Google Maps V2 无法使用 Fused Location

如何使用适用于 Android V2 的 Google Maps 处理地图移动端?

Android studio v0.3.2, gradle, google maps v2.0 找不到类“com.google.android.gms.maps.MapFragment

Google Maps Android api v2 和当前位置

使用地理编码器和 android Google Maps API v2 获取纬度和经度