自动按MapView上的“我的位置”按钮

时间:2014-05-01 10:54:46

标签: android android-mapview google-maps-android-api-2

我在MapView中有Fragment,我已经通过setMyLocationEnabled()显示了用户位置。一切都按预期工作。

对于典型的用例,我想缩放到用户的位置 - 按下股票地图UI上的“我的位置”按钮的确切行为。

我想让用户不必按“我的位置”按钮并自动执行此步骤,但我无法从API中看到如何执行此操作。我可以从UiSettings获取GoogleMap,但这似乎只允许我查询/设置地图用户界面的状态(即我的位置是否已启用,因此可以按下)。

或者我是否真的必须设置LocationClient并计算并动画为CameraUpdate?这似乎是做很多普通/简单事情的大量工作。正确实现这一点的逻辑(即用户期望它的行为)比初看起来更复杂,我渴望避免重复显示已经在谷歌地图中实现的代码。

2 个答案:

答案 0 :(得分:3)

要将地图相机位置移动到用户位置,您必须先找到用户位置,然后使用locationmangaer类对象,您可以在onLocationChange方法中获取该位置

LocationManager locationManager = (LocationManager) getActivity().getSystemService(
                Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, 0, 0, this);

//... 

public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(location.getLatitude(), location
                        .getLongitude())) //
                .zoom(9).build();
        map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

        locationManager.removeUpdates(this);
}

答案 1 :(得分:1)

Hierarchy Viewer表示"我的位置按钮"是0x2。因此,根据该信息,您可以使用SupportMapFragment.getView来呼叫View.findViewById,然后View.performClick

以下是一个例子:

final SupportMapFragment smf = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
smf.getView().findViewById(0x2).performClick();

我在"我的位置演示"在Google Play服务示例中提供并且有效。

该演示位于:<android-sdk>/extras/google-play-services/samples/maps