android - Android Studio Google Maps 在探索地图时不断返回用户位置
问题描述
背景:我正在开发一个应用程序,该应用程序允许用户在 20 英里半径范围内看到其他用户。当他们登录时,他们会被发送到 MapsActivity,该活动会缩放到他们当前的位置,并显示 20 英里内的任何其他在线用户。
问题:每次我在地图上滚动时,我都会回到我当前的位置,如果我缩小或缩小,它会重新放大到我设置的相同缩放。我什至试过这条线,但它没有用:
eaterGoogleMap.getUiSettings().setAllGesturesEnabled(true);
我需要做的事情:当他们第一次在我的应用程序中打开 MapsActivity 时缩放到他们的位置。允许用户像在 Google Maps App 中一样滚动地图,并在移动时更新他们的位置,就像在 Google Maps App 中一样。
我做了什么:
@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();
}
解决方案
使用标志来控制缩放动作。或者只放大onConnect
(这意味着第一次)顺便说一下,您不必每次都删除标记,您可以通过marker. setPosition(...)
boolean cameraSet = false;
Marker marker;
@Override
public void onLocationChanged(Location location) {
...
if(!cameraSet){
eaterGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
cameraSet = true;
}
}
推荐阅读
- sql - 需要避免 Rails3 中的 SQL 注入
- ios - 在iOS中通过openURL启动其他应用程序时如何传递免费对象?
- python - 使用 boost.python 从 c++ 调用 Python 函数
- java - 将 if else 语句压缩成更短更优雅的代码
- django - django 序列化器数据提取名词
- c# - XAML 绑定到 cellection
- python - For 循环实现 + RandInt
- mysql - 为数据库中的每个债务人/客户选择 MAX(DATEDIFF())
- android - 尝试从具有动态条件的 Android Room Persistence Library 中获取平均值
- html - 使用自定义 HTML 标签的缺点是什么?