Google Maps API v2会调用单击mylocationbutton的行为

时间:2013-01-30 08:09:05

标签: android google-maps

我有一个完全正常工作的GoogleMap,我可以通过调用

显示我的用户位置
mMap.setMyLocationEnabled(true);

我想要完成的是实际点击按钮的功能,该按钮现在显示在GoogleMap上(即通过缩放等方式将地图设置为用户位置的动画)。

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

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

提前致谢。

编辑:

我基本上想要做的是将地图置于用户位置,就像我点击按钮时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

3 个答案:

答案 0 :(得分:4)

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

我的班级标题:

public class FragActivity extends SherlockFragmentActivity implements  OnMyLocationChangeListener

private GoogleMap mMap;

我的mMap-setup:

    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);
}

和我的onlocationchange:

@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);
}

像魅力一样工作

答案 1 :(得分:2)

不确定为什么其他答案在谈论OnMyLocationChangeListener。这不是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。但是这种检索按钮的方法基于this highly rated answer from 2013,到目前为止,从Google Play Services 8.4.0开始,仍然可以正常运行。

答案 2 :(得分:1)

2013年2月更新:

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

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

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

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

来源:搜索时间