中心用户在Google地图上的位置,但允许自由移动

时间:2017-05-02 10:18:19

标签: android google-maps

我创建了第一个应用程序,显示用户位置信息以及谷歌地图上显示的位置。目前app / map完美地工作,因为我希望它除了一个小的niggle并且地图不断跳回用户位置并缩放回设定值

我所追求的是用于更新用户位置并放大其中的地图,但仅在连接到GPS时执行此操作。一旦完成此操作并且用户已移动地图或放大或缩小该位置仍然显示,但它不会再次居中并且放大/缩小(每次更改位置),类似于Google Maps app的方式做到了。

目前我在onLocationChanged方法中有以下代码,我确信我需要移动它或创建一些逻辑来完成我所追求的目标。

public void onLocationChanged(Location location) {

// Update Location On Map
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16.0F));
}

这是使用最新的GoogleAPIClient。我已经看过很多关于这里和网络的教程了,我似乎无法弄明白。我相信这很简单。

2 个答案:

答案 0 :(得分:1)

只需使用布尔标志,并在地图缩放到用户位置

后将其设置为true
boolean isFirstLocation=false;
public void onLocationChanged(Location location) {

    // Set user marker on the map on every location change with this code
      LatLng currentLatLng = new LatLng(location.getLatitude(),location.getLongitude());
      MarkerOptions markerOptions = new MarkerOptions().position(currentLatLng);
      mMap.addMarker(markerOptions);

    // Update Location On Map
      if(!isFirstLocation)
    {
      mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng , 16.0F));
     isFirstLocation=true;
    }

}

无需在每个位置更改时为相机设置动画

答案 1 :(得分:0)

Marker mCurrLocationMarker;

@Override
    public void onLocationChanged(Location location) {

        mLastLocation = location;
        if (mCurrLocationMarker != null) {
            mCurrLocationMarker.remove();
        }

        //Place current location marker
        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLng);
        markerOptions.title("Current Position");
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
        mCurrLocationMarker = mMap.addMarker(markerOptions);

        //move map camera
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(11));

        //stop location updates
        if (mGoogleApiClient != null) {
            LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
        }

    }

如果你的位置发生了变化,那么这将自动对焦并将标记更改为当前位置。 希望这能解决你的问题