探索地图时,Android Studio Google Maps会继续返回用户位置

时间:2019-03-15 05:26:32

标签: android google-maps

上下文:我正在开发一个允许用户查看半径20英里范围内其他用户的应用。当他们登录时,他们将被发送到MapsActivity,该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();

}

2 个答案:

答案 0 :(得分: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;
    }

 }

答案 1 :(得分:0)

设置位置要求最小位移至少为1

locationRequest.setSmallestDisplacement(1);

不再需要布尔值。