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)

Google Android Studio Kotlin

Map返回Null或空Android Studio

com.google.android.maps 在 Android Studio 中不存在

无法按照 Google“入门”页面中的说明在 Android Studio 中添加地图; Android Studio 报错

Google计划放弃Eclipse而支持Android Studio