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

Android Google Maps API v2调用单击mylocationbutton的行为,android,google-maps,Android,Google Maps,我有一个完整的谷歌地图,我可以在通话中显示我的用户位置 mMap.setMyLocationEnabled(true); 我想要完成的是在谷歌地图上实际点击按钮的功能(即,使用正确的缩放等将地图动画化到用户位置) 谷歌地图对象中已经有了这个功能,我该如何使用它呢 我不想使用LocationListener或类似的工具来完成这项任务,我只想“调用与我在地图上单击按钮时调用的代码相同的代码”。能这么简单吗 提前谢谢 编辑: 我主要想做的是将地图居中于用户位置,就像我点击按钮时谷歌地图居中于用户位置

我有一个完整的
谷歌地图
,我可以在通话中显示我的用户位置

mMap.setMyLocationEnabled(true);
我想要完成的是在
谷歌地图
上实际点击按钮的功能(即,使用正确的缩放等将地图动画化到用户位置)

谷歌地图对象中已经有了这个功能,我该如何使用它呢

我不想使用
LocationListener
或类似的工具来完成这项任务,我只想“调用与我在地图上单击按钮时调用的代码相同的代码”。能这么简单吗

提前谢谢

编辑:

我主要想做的是将地图居中于用户位置,就像我点击按钮时谷歌地图居中于用户位置一样。像这样:

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

显然,谷歌正在研究这个问题

2013年2月更新:

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

这是不可能的。我发现Android中的谷歌地图提供给你的信息非常有限。它只是不允许您直接访问用户位置更新或用户可以按下的按钮(您只能启用/禁用它,不能模拟按下)

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

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


来源:数小时的搜索

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

我的班级标题:

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

工作起来很有魅力

我不太清楚为什么其他答案都在谈论关于MyLocationChangeListener的问题。这不是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可能会在谷歌地图API的未来版本中发生变化。但是这种检索按钮的方法是基于Google Play Services 8.4.0的,到目前为止,它仍然可以完美地工作。

您可以添加用于地图的代码吗。我用一些代码编辑了我的原始帖子。这就是你要找的吗?我指的是谷歌地图文件本身,这样我们就可以找到将用于地图居中的组件。你也可以这样说:你想得到我们在触摸或单击默认的当前位置按钮(或图层)时得到的一些值吗嵌入在谷歌地图的右上方?这是我发现的。显然,谷歌正在研究这个问题。对于动画位置,使用;mMap.animateCamera(myLoc);