Android Maps:如何删除以前的圈子,但保留新的圈子?

Posted

技术标签:

【中文标题】Android Maps:如何删除以前的圈子,但保留新的圈子?【英文标题】:Android Maps: how to remove previous circle, but keep new one? 【发布时间】:2020-04-06 01:40:33 【问题描述】:

所以我想要一个围绕用户当前位置的圈子,但是现在每次我移动一个新圈子时都会创建一个新圈子,但旧圈子仍然存在。这会在地图上造成很大的混乱。

        LocationRequest locationRequest = LocationRequest.create();
        locationRequest.setInterval(2000);
        locationRequest.setFastestInterval(1000);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationCallback = new LocationCallback() 
            @Override
            public void onLocationResult(LocationResult locationResult) 
                super.onLocationResult(locationResult);
                if (locationResult == null) 
                    return;
                

                mLastKnownLocation = locationResult.getLastLocation();
                checkLocation = mLastKnownLocation;

                    LatLng lastKnownLatLng = new LatLng(mLastKnownLocation.getLatitude(), mLastKnownLocation.getLongitude());

                    Circle mapCircle = mMap.addCircle(new CircleOptions()
                            .center(new LatLng(mLastKnownLocation.getLatitude(),mLastKnownLocation.getLongitude()))
                            .radius(20)
                            .strokeColor(Color.argb(200,0,64,122))
                            .strokeWidth(5)
                            .fillColor(Color.argb(100,82,189,236)));
                    mapCircle.setCenter(new LatLng(mLastKnownLocation.getLatitude(),mLastKnownLocation.getLongitude()));

HERE I CALCULATE SOME OTHER STUFF

//                mFusedLocationProviderClient.removeLocationUpdates(locationCallback);
            
        ;
        mFusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, null);

这就是我创建圆圈的方式。现在我尝试添加 mapCircle.remove() 但这导致根本没有得到一个圆圈。我怎样才能做到这一点。是的,我已经看过这个问题: Remove a circle from android Google Maps API v2 without clearing map 似乎并没有解决我的问题。

【问题讨论】:

你在哪里添加mapCircle.remove mapCircle.setCenter() 下,但不确定这是否是正确的地方 不要在每次位置更新时都创建一个新圈子;只需移动一个圆圈 - 只需处理没有圆圈的初始情况。 【参考方案1】:

您可以将本地 mapCircle 存储在 Activity 或 Fragment(您现在正在使用的那个)中,然后在添加新的之前将其删除

class MyActivity extends Activity 
    Circle mapCircle = null;

    public someMethod() 
        // Inside location callback
        locationCallback = new LocationCallback() 
            @Override
            public void onLocationResult(LocationResult locationResult) 
                super.onLocationResult(locationResult);
                if (locationResult == null) 
                    return;
                

                mLastKnownLocation = locationResult.getLastLocation();
                checkLocation = mLastKnownLocation;

                LatLng lastKnownLatLng = new LatLng(mLastKnownLocation.getLatitude(), mLastKnownLocation.getLongitude());

                if (mapCircle != null) 
                    mapCircle.remove();
                
                mapCircle = mMap.addCircle(new CircleOptions()
                        .center(new LatLng(mLastKnownLocation.getLatitude(),mLastKnownLocation.getLongitude()))
                        .radius(20)
                        .strokeColor(Color.argb(200,0,64,122))
                        .strokeWidth(5)
                        .fillColor(Color.argb(100,82,189,236)));
                mapCircle.setCenter(new LatLng(mLastKnownLocation.getLatitude(),mLastKnownLocation.getLongitude()));
            
        
    


【讨论】:

以上是关于Android Maps:如何删除以前的圈子,但保留新的圈子?的主要内容,如果未能解决你的问题,请参考以下文章

(Google Maps Android Marker Clustering Utility)Fragment 暂停时不会删除集群项目

Google Maps API v3 删除所有折线

设置新航点后如何删除以前的折线... Google Map Android Studio

Android:使用 Google API 获取实时方向,还是与 Google Maps 通信?

如何使用 android-maps-utils 更改单击的标记图标?

点击按钮时谷歌地图崩溃。 (无效 com.google.maps.api.android.lib6.impl.bp.v())