频繁更新位置时的CameraMovement

时间:2018-03-10 16:46:29

标签: android google-maps geolocation

我正在寻找有关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());
    }
}

1 个答案:

答案 0 :(得分:0)

所以我现在用另一种方式解决了这个问题。简单设计了两种不同的方法(一个位于该位置周围的重新定位摄像头,一个没有重新定位),并声明了每次创建片段时都是真的布尔firstRun。

如果为true,则调用相对于该位置重新定位摄像机的初始方法,并将布尔值设置为false。

每当值为false时,调用常规方法来处理位置更新,但不会重新定位摄像机。

对于重新定位,可以使用Google提供的位置按钮。

我觉得这太复杂了,这是一个简单的解决方案,正是我需要的东西:)