标记消失

时间:2018-04-16 15:58:28

标签: android sqlite google-maps marker

当我在范围内时,我尝试在地图上设置标记可见,并且当我不在范围内时设置不可见。当移动并进入区域标记时 - 但是当我超出范围时,标记仍然可见。这是我的代码onLocationUpdate。 我遍历我的数据库并添加标记。 getDeviceLocation使用我当前的位置返回Ltglng。我也为GPS提供商实现了这一点。任何想法都会有所帮助!

 locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Cursor res = activityA.myDB.getAllData();
                while (res.moveToNext()) {

                    double ltd = Double.valueOf(res.getString(3));
                    double lng = Double.valueOf(res.getString(4));
                    LatLng hole = new LatLng(ltd, lng);
                    Marker marker = mMap.addMarker(new MarkerOptions().position(hole)
                            .title(res.getString(1)).visible(false));

                 if (SphericalUtil.computeDistanceBetween(getDeviceLocation(), marker.getPosition()) <3 ) {
                        marker.setVisible(true);
                    } 
                }
            }

1 个答案:

答案 0 :(得分:1)

根据您所提供的内容,这是我可以收集的内容。

您正在添加标记(最初设置为不可见),然后如果它符合您的if语句,则会使它们不可见。问题是,我没有看到任何地方,你会让它们再次隐形,或者将它们移除。

您是否在活动中保存了这些标记?例如在ArrayList中?

我有两点建议:

1)在while语句之前调用mMap.clear()。这将清除任何标记的地图,然后在创建时添加新标记。

2)将所有标记保存在ArrayList中,然后保存在onLocationChanged中,使用for循环遍历所有标记并使其超出范围不可见。这是一个例子:

for (Marker marker: mMarkerArrayList) {
    if (outOfRange()) {
        marker.visible(false);
    }
}

这里mMarkerArrayList是包含所有标记的ArrayList。 outOfRange()是一个辅助函数,如果标记是outOfRange则返回一个布尔值。