如何在不更改用户设置的缩放比例的情况下更新地图标记?

Posted

技术标签:

【中文标题】如何在不更改用户设置的缩放比例的情况下更新地图标记?【英文标题】:How do I update the map marker without changing the zoom that the user has set? 【发布时间】:2013-03-11 04:01:38 【问题描述】:

我正在构建一个使用带有位置监听器的 Google 地图的 android 应用。当地图第一次出现时,我在位置监听器中将缩放设置为 12,我在谷歌地图开发方面相当新,所以我想知道一旦用户捏住以更改缩放,我如何在不影响缩放的情况下更新位置?下面是我的位置监听器。

/**
 *Mylocationlistener class will give the current GPS location 
 *with the help of Location Listener interface 
 */
private class Mylocationlistener implements LocationListener 

    @Override
    public void onLocationChanged(Location location) 

        if (location != null) 
            // ---Get current location latitude, longitude---

            Log.d("LOCATION CHANGED", location.getLatitude() + "");
            Log.d("LOCATION CHANGED", location.getLongitude() + "");
            currentLocation = new LatLng(location.getLatitude(), location.getLongitude());
            currentLatLng = new LatLng(location.getLatitude(), location.getLongitude());
            Marker currentLocationMarker = map.addMarker(new MarkerOptions().position(currentLocation).title("Current Location"));
            // Move the camera instantly to hamburg with a zoom of 15.
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 15));
            // Zoom in, animating the camera.
            map.animateCamera(CameraUpdateFactory.zoomTo(12), 2000, null);
            if (!firstPass)
                currentLocationMarker.remove();
            
            firstPass = false;
            Toast.makeText(MapViewActivity.this,"Latitude = "+
                    location.getLatitude() + "" +"Longitude = "+ location.getLongitude(),
                    Toast.LENGTH_LONG).show();

        
    

【问题讨论】:

【参考方案1】:

您可以在侦听器中添加一个局部变量,并使用它仅缩放第一个位置。代码如下所示:

private class Mylocationlistener implements LocationListener 

   private boolean zoomed = false;

   @Override
   public void onLocationChanged(Location location) 

    if (location != null) 
        // ---Get current location latitude, longitude---

        Log.d("LOCATION CHANGED", location.getLatitude() + "");
        Log.d("LOCATION CHANGED", location.getLongitude() + "");
        currentLocation = new LatLng(location.getLatitude(), location.getLongitude());
        currentLatLng = new LatLng(location.getLatitude(), location.getLongitude());
        Marker currentLocationMarker = map.addMarker(new MarkerOptions().position(currentLocation).title("Current Location"));
        // Move the camera instantly to hamburg with a zoom of 15.
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 15));
        // Zoom in, animating the camera.
        if (!zoomed) 
            map.animateCamera(CameraUpdateFactory.zoomTo(12), 2000, null);
            zoomed = true;
                                               
        if (!firstPass)
            currentLocationMarker.remove();
        
        firstPass = false;
        Toast.makeText(MapViewActivity.this,"Latitude = "+
                location.getLatitude() + "" +"Longitude = "+ location.getLongitude(),
                Toast.LENGTH_LONG).show();

    

【讨论】:

【参考方案2】:

尝试使用这个:

map.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLocationMarker.getPosition(), map.getCameraPosition().zoom));

【讨论】:

你一定是新手。这是几年前回答的。

以上是关于如何在不更改用户设置的缩放比例的情况下更新地图标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不清除 GoogleMap 的情况下更新多个位置

如何在不刷新整个地图的情况下更新谷歌地图上的标记位置?

在不加载整个地图的情况下更新谷歌地图中的标记

安卓开发 百度地图怎么自动设置缩放比例

单击反应传单 v.3.x 中的标记时如何动态更改地图缩放?

PyCharm:如何在不使用鼠标滚动缩放的情况下更改字体大小?