我在MapView
中有Fragment
,我已经通过setMyLocationEnabled()
显示了用户位置。一切都按预期工作。
对于典型的用例,我想缩放到用户的位置 - 按下股票地图UI上的“我的位置”按钮的确切行为。
我想让用户不必按“我的位置”按钮并自动执行此步骤,但我无法从API中看到如何执行此操作。我可以从UiSettings
获取GoogleMap
,但这似乎只允许我查询/设置地图用户界面的状态(即我的位置是否已启用,因此可以按下)。
或者我是否真的必须设置LocationClient
并计算并动画为CameraUpdate
?这似乎是做很多普通/简单事情的大量工作。正确实现这一点的逻辑(即用户期望它的行为)比初看起来更复杂,我渴望避免重复显示已经在谷歌地图中实现的代码。
答案 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