我创建了第一个应用程序,显示用户位置信息以及谷歌地图上显示的位置。目前app / map完美地工作,因为我希望它除了一个小的niggle并且地图不断跳回用户位置并缩放回设定值。
我所追求的是用于更新用户位置并放大其中的地图,但仅在连接到GPS时执行此操作。一旦完成此操作并且用户已移动地图或放大或缩小该位置仍然显示,但它不会再次居中并且放大/缩小(每次更改位置),类似于Google Maps app的方式做到了。
目前我在onLocationChanged
方法中有以下代码,我确信我需要移动它或创建一些逻辑来完成我所追求的目标。
public void onLocationChanged(Location location) {
// Update Location On Map
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16.0F));
}
这是使用最新的GoogleAPIClient
。我已经看过很多关于这里和网络的教程了,我似乎无法弄明白。我相信这很简单。
答案 0 :(得分:1)
只需使用布尔标志,并在地图缩放到用户位置
后将其设置为trueboolean isFirstLocation=false;
public void onLocationChanged(Location location) {
// Set user marker on the map on every location change with this code
LatLng currentLatLng = new LatLng(location.getLatitude(),location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions().position(currentLatLng);
mMap.addMarker(markerOptions);
// Update Location On Map
if(!isFirstLocation)
{
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng , 16.0F));
isFirstLocation=true;
}
}
无需在每个位置更改时为相机设置动画
答案 1 :(得分:0)
Marker mCurrLocationMarker;
@Override
public void onLocationChanged(Location location) {
mLastLocation = location;
if (mCurrLocationMarker != null) {
mCurrLocationMarker.remove();
}
//Place current location marker
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title("Current Position");
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
mCurrLocationMarker = mMap.addMarker(markerOptions);
//move map camera
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(11));
//stop location updates
if (mGoogleApiClient != null) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
}
如果你的位置发生了变化,那么这将自动对焦并将标记更改为当前位置。 希望这能解决你的问题