3

我有一个完整的工作GoogleMap,我可以通过电话显示我的用户位置

mMap.setMyLocationEnabled(true);

我想要完成的是实际单击现在出现在按钮上的功能GoogleMap(即使用正确的缩放等将地图动画到用户位置)。

该功能已经存在于 GoogleMap 对象中,我该如何使用它?

我不想使用 aLocationListener或这样来完成此操作,我只想“调用相同的代码”,当我单击地图上的按钮时会调用该代码。可以这么简单吗?

提前致谢。

编辑:

我基本上想要做的是将地图置于用户位置的中心,就像我单击按钮时 GoogleMap 以用户位置为中心的方式一样。像这样:

    GoogleMap mMap = this.getMap();
    if(mMap != null) {
        mMap.setMyLocationEnabled(true);
        //TODO center the map on mylocation
    }

编辑:

显然谷歌正在努力解决这个问题。http://code.google.com/p/gmaps-api-issues/issues/detail?id=4644

4

3 回答 3

4

当我们获得第一次位置更新时,这就是我导航到地图中心的方式。

我的班级标题:

public class FragActivity extends SherlockFragmentActivity implements  OnMyLocationChangeListener

private GoogleMap mMap;

我的 mMap 设置:

    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = customMapFragment.getMap();

        // Check if we were successful in obtaining the map.
        if (mMap != null)
            setUpMap();
    }

setUpMap 方法:

private void setUpMap() {
    mMap.setMyLocationEnabled(true);
    mMap.setOnMyLocationChangeListener(this);
}

和我的位置变化:

@Override
public void onMyLocationChange(Location lastKnownLocation) {
    CameraUpdate myLoc = CameraUpdateFactory.newCameraPosition(
            new CameraPosition.Builder().target(new LatLng(lastKnownLocation.getLatitude(),
                    lastKnownLocation.getLongitude())).zoom(6).build());
    mMap.moveCamera(myLoc);
    mMap.setOnMyLocationChangeListener(null);
}

奇迹般有效

于 2013-02-27T13:07:24.140 回答
3

不太确定为什么其他答案都在谈论OnMyLocationChangeListeners。这不是 OP 中所要求的。所问的是如何复制单击 MyLocationButton的确切行为,这实际上比仅将相机动画到用户位置更复杂。该按钮根据您当前所处的缩放级别执行不同的操作。

例如,当您被缩小时,单击按钮将在放大时将您动画到您的位置而如果您已经处于某些缩放级别,单击按钮只会将动画到您的位置,同时保持当前缩放级别。

与其费力地尝试复制这种行为,不如我们可以简单地获得对 MyLocationButton 的引用,然后单击它,这不是很好吗?好吧,这是我发现的目前最好的方法:

@OnClick(R.id.fabMyLocation)
public void onMyLocationClick(FloatingActionButton fabMyLocation) {
    View myLocationButton = ((View) mapFragment.getView().findViewById(Integer.parseInt("1")).getParent())
            .findViewById(Integer.parseInt("2"));

    myLocationButton.performClick();
}

是的,它并不漂亮,并且依赖于在未来版本的 Google Maps API 中可能会更改的硬编码 ID。但是这种检索按钮的方法是基于2013 年的这个高度评价的答案,到目前为止,截至 Google Play Services 8.4.0,仍然可以完美运行。

于 2016-01-05T23:42:43.843 回答
1

2013 年 2 月更新:

现在这是可能的。您现在可以设置地图的 OnMyLocationChangeListener。根据需要接收更新并相应地移动相机。

这是不可能的。我发现 Android 中的 GoogleMap 提供给您的信息非常有限。它根本不会让您直接访问用户位置更新或用户可以按下的按钮(您只能启用/禁用它,而不是模拟按下)。

您必须实现 LocationSource 和 LocationListener 接口并使用 LocationManager 从设备获取更新并使用它们将它们发送到地图。

然后,您可以将自己的自定义按钮添加到叠加层以复制默认按钮,并使用您自己的相机和缩放控件来模拟功能。

资料来源:搜索时间

于 2013-02-05T05:46:39.270 回答