Android Studio Google Maps 在探索地图时不断返回用户位置
Posted
技术标签:
【中文标题】Android Studio Google Maps 在探索地图时不断返回用户位置【英文标题】:Android Studio Google Maps keep going back to user location when exploring map 【发布时间】:2019-03-15 05:26:31 【问题描述】:上下文:我正在开发一个应用程序,该应用程序允许用户在 20 英里半径范围内看到其他用户。当他们登录时,他们会被发送到 MapsActivity,该活动会缩放到他们当前的位置并显示 20 英里内的任何其他在线用户。
问题:每次我在地图上滚动时,我都会回到我当前的位置,如果我缩小或缩小,它会重新放大到我设置的相同缩放。我什至试过这条线,但它没有用:
eaterGoogleMap.getUiSettings().setAllGesturesEnabled(true);
我需要做的事情:当他们第一次在我的应用中打开 MapsActivity 时缩放到他们的位置。让用户能够像在 Google 地图应用中一样滚动地图,并在移动时更新他们的位置,就像在 Google 地图应用中一样。
我做了什么:
@Override
public void onConnected(Bundle bundle)
// Constantly Update User location every 1.1 seconds!
locationRequest = new LocationRequest();
locationRequest.setInterval(1100);
locationRequest.setFastestInterval(1100);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
return;
Log.d("reque", "check here");
@Override
public void onLocationChanged(Location location)
lastLocation = location;
if (currentUserLocationMarker != null)
currentUserLocationMarker.remove();
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title(getString(R.string.user_current_location_marker_title));
markerOptions.visible(false);
currentUserLocationMarker = eaterGoogleMap.addMarker(markerOptions);
float zoom = 17.0f;
eaterGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
eaterGoogleMap.getUiSettings().setZoomControlsEnabled(true);
eaterGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
eaterGoogleMap.getUiSettings().setRotateGesturesEnabled(false);
// Begin to locate all online Vendors to display on map
locateOnlineVendors();
【问题讨论】:
onLocationChanged 方法在您移动时更改位置。这个方法调用很快,你在这个方法中设置了缩放代码,那是你的缩放不能正常工作的时候。 哦不,我没有在public void onConnected
方法中设置eaterGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
。缩放设置在 public void onLocationChanged
方法内。如果我理解正确的话。我需要做什么?
【参考方案1】:
使用标志来控制缩放动作。
或者只放大onConnect
(表示第一次)
顺便说一句,您不必每次都删除标记,您可以通过marker. setPosition(...)
操纵其位置
boolean cameraSet = false;
Marker marker;
@Override
public void onLocationChanged(Location location)
...
if(!cameraSet)
eaterGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
cameraSet = true;
【讨论】:
if(!cameraSet) eaterGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom)); cameraSet = true;
有效!如此干净和简约,我喜欢它。谢谢你。我已经有这个问题好几个月了,但我推迟了它以专注于更多核心功能。这是最后需要修复的事情之一。 cameraSet 的布尔值为 false,如果 cameraSet 为 false,则 if 语句放大使其为 true。因此,如果 cameraSet 为 true,则意味着 if 语句停止运行缩放。这么简单的解决方案,布尔值很棒,谢谢!鼓舞人心!【参考方案2】:
将locationRequest最小位移设置为至少1
locationRequest.setSmallestDisplacement(1);
不再需要布尔值。
【讨论】:
以上是关于Android Studio Google Maps 在探索地图时不断返回用户位置的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio - Cannot reload AVD list (d:skin)
com.google.android.maps 在 Android Studio 中不存在
无法按照 Google“入门”页面中的说明在 Android Studio 中添加地图; Android Studio 报错