【发布时间】:2018-03-10 16:46:29
【问题描述】:
我正在寻找有关 mapView 中 cameraMovement 的最佳实践建议。 我现在每隔几秒钟就会检索一次位置更新,我想知道您如何最好地处理 cameraMovement。 我想让用户在地图上滚动并探索一些地方+阅读 infoWindows 中的文本,而无需相机不断围绕当前用户位置重新定位。 你能推荐我吗,如何以最好的方式处理这个问题?
public LocationRequest getLocationRequest() {
LocationRequest locationRequest = new LocationRequest();
locationRequest.setInterval(100000);
locationRequest.setFastestInterval(20000);
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
return locationRequest;
}
这在位置回调中调用。
public void createLocationCallback() {
mLocationCallback =new LocationCallback() {
@Override
public void onLocationResult (LocationResult locationResult){
for (Location location : locationResult.getLocations()) {
Log.i(LOG_TAG, "Location: " + location.getLatitude() + " " + location.getLongitude() + " " + location.getTime());
mLastKnownLocation = location;
updateLocationUI(location);
updateLocationOnFirebase();
displayLocationData();
}
}
};
如您所见,对于每个新检索到的位置,都会调用 updateLocationUI 方法,将相机重新定位在当前位置周围。
private void updateLocationUI(Location mLastKnownLocation) {
if (mGoogleMap == null) {
return;
}
try {
if (mLastKnownLocation != null) {
mGoogleMap.setMyLocationEnabled(true);
mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(mLastKnownLocation.getLatitude(),
mLastKnownLocation.getLongitude()), DEFAULT_ZOOM));
Snackbar.make(getActivity().findViewById(android.R.id.content),
"Retrieving location update", Snackbar.LENGTH_SHORT).show();
} else {
mGoogleMap.setMyLocationEnabled(false);
mGoogleMap.getUiSettings().setMyLocationButtonEnabled(false);
Log.d(LOG_TAG, "Current location null. Use defaults here");
}
} catch (SecurityException e) {
Log.e("Exception: %s", e.getMessage());
}
}
【问题讨论】:
-
您可以使用一个计时器,当用户触摸/移动地图并设置一个标志时,该计时器会启动/重新启动。如果设置了标志,则不要移动相机。如果计时器到期清除标志。将计时器持续时间设置为您认为用户不想要重新定位功能多长时间。或者,让用户使用按钮清除标志;因此,每当用户开始四处移动时,它只会在用户使用按钮(例如 mylocation 按钮)重新启用后重新定位到位置。
-
非常感谢,我会朝这个方向尝试。我试图遍历位置,只在第一个位置对象中移动相机,但没有按照我认为的方式工作。您是否建议在触摸地图时停止调用更新 UI 的函数?同样从性能的角度来看
标签: android google-maps geolocation