【问题标题】:Google Maps API v2 invoke behaviour of clicking mylocationbuttonGoogle Maps API v2 调用点击 mylocationbutton 的行为
【发布时间】:2013-01-30 08:09:04
【问题描述】:

我有一个可以正常工作的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

【问题讨论】:

  • 您能否添加您用于地图的代码。会更容易检查出来。
  • 我用一些代码编辑了我的原始帖子。这是你要找的吗?
  • 我指的是谷歌地图文件本身,以便我们可以找出哪个组件将用于使地图居中。
  • 你也可以参考这个:stackoverflow.com/questions/3705336/…
  • 当我们触摸或单击嵌入在谷歌地图右上角的默认当前位置按钮(或图层)时,您想获取一些值吗?

标签: android google-maps


【解决方案1】:

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

我的班级标题:

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

还有我的 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);
}

像魅力一样工作

【讨论】:

  • 用于动画定位,使用; mMap.animateCamera(myLoc);
【解决方案2】:

不太清楚为什么其他答案都在谈论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();
}

是的,它并不漂亮,并且依赖于硬编码的 ID,这些 ID 可能会在 Google Maps API 的未来版本中发生变化。但是这种检索按钮的方法是基于 this highly rated answer from 2013 的,到目前为止,截至 Google Play Services 8.4.0,仍然可以完美运行。

【讨论】:

    【解决方案3】:

    2013 年 2 月更新:

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

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

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

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

    来源:搜索时间

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2012-11-28
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多