【问题标题】:multiple overlayitems not visible on mapview in android在android的mapview上看不到多个overlayitems
【发布时间】:2011-08-11 10:51:16
【问题描述】:

这是我在我的活动中使用的代码,用于在地图视图上显示多个标记。 我使用了一个扩展 itemizedoverlays 的 customoverlay 类。这是该类的代码:

public class view1CustomOverlays extends ItemizedOverlay<OverlayItem> {

    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    boolean isClickable = false;
    Context context = null;
    Drawable orangeMarker = null;

    public view1CustomOverlays(Drawable defaultMarker, Context c,
            boolean isActive, Drawable inActiveMarker) {
        super(boundCenterBottom(defaultMarker));
        context = c;
        isClickable = isActive;
        orangeMarker = inActiveMarker;
    }

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        return mOverlays.size();
    }
}

我在主 UI 活动中使用这个类。以下是我如何使用此类将叠加层添加到我的地图视图:

更新

private void view1LoadDataOnMap(String[] poleCord) {
    try {
        Drawable redFlag = getResources().getDrawable(R.drawable.red);
        Drawable greenFlag = getResources().getDrawable(R.drawable.green);
        Drawable orangeFlag = getResources().getDrawable(R.drawable.orange);
        int noOfPoles = poleCord.length / 4;
        List<Overlay> list = map.getOverlays();
        list.clear();
        view1CustomOverlays customOverlay = null;
        for (int i = 0; i < noOfPoles; i=i+4) {
            Float lat = Float.parseFloat(poleCord[i]);
            Float lng = Float.parseFloat(poleCord[i+1]);
            String poleNumber = poleCord[i+2];
            String ticketId = poleCord[i+3];
            customOverlay = new view1CustomOverlays(greenFlag, this, true,
                    orangeFlag);
            GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
            OverlayItem overlayItem = new OverlayItem(p, poleNumber, null);
            customOverlay.addOverlay(overlayItem);
            Log.i("adding overlay",overlayItem.toString());
        }
        list.add(customOverlay);
    } catch (NumberFormatException e) {
        e.printStackTrace();
    } catch (NotFoundException e) {
        e.printStackTrace();
    }

}

屏幕上只显示一个覆盖项。可能是什么问题呢。我已经检查了有几个覆盖项被添加到我的类中,但是当我将类添加到我的地图视图时,只有一个覆盖项被绘制。

我需要在地图上添加总共 81 个标记。所以我正在制作 81 个叠加项目并将它们添加到叠加层并在最后添加一次叠加层。

提前谢谢你。

【问题讨论】:

    标签: android android-mapview


    【解决方案1】:

    你不见了:

    myMap.getOverLays().add(customOverlay);

    private void view1LoadDataOnMap(String[] poleCord) {
        try {
            Drawable redFlag = getResources().getDrawable(R.drawable.red);
            Drawable greenFlag = getResources().getDrawable(R.drawable.green);
            Drawable orangeFlag = getResources().getDrawable(R.drawable.orange);
            int noOfPoles = poleCord.length / 4;
            List<Overlay> list = map.getOverlays();
            list.clear();
            view1CustomOverlays customOverlay = null;
            for (int i = 0; i < noOfPoles; i++) {
                Float lat = Float.parseFloat(poleCord[0]);
                Float lng = Float.parseFloat(poleCord[1]);
                String poleNumber = poleCord[2];
                String ticketId = poleCord[3];
                customOverlay = new view1CustomOverlays(greenFlag, this, true,
                        orangeFlag);
                GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
                OverlayItem overlayItem = new OverlayItem(p, poleNumber, null);
                customOverlay.addOverlay(overlayItem);
                myMap.getOverLays().add(customOverlay);
                Log.i("adding overlay",overlayItem.toString());
            }
            list.add(customOverlay);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (NotFoundException e) {
            e.printStackTrace();
        }
    
    }
    

    【讨论】:

    • 不,我不是,变量 list = map.getOverlays(); (见代码的顶部),最后我在做 list.add(customOverlay) (在 for 循环之外。这是因为我不想添加多个覆盖。我在一个覆盖中添加了几个项目,我正在地图上添加该叠加层
    • 您是否尝试过使地图无效? myMap.invalidate() 添加叠加层后?
    • 您的意思是添加覆盖项?因为我只是添加一个叠加层。
    • 添加叠加层后尝试执行map.invalidate()
    • 试过了。什么都没有发生。我只能看到一个标记。尽管我添加了这么多。我得到了重绘地图背后的逻辑,但它不起作用。
    【解决方案2】:

    不管 noOfPoles 是什么,您都会继续添加元素 0、1、2 和 3。您可能有多个标记,但它们都在同一个位置。你需要让它成为'i'的函数

    喜欢

    for (int i = 0; i < noOfPoles; i++) {
                Float lat = Float.parseFloat(poleCord[ i * 4]);
                Float lng = Float.parseFloat(poleCord[i * 4 + 1]);
                String poleNumber = poleCord[i * 4 + 2];
                String ticketId = poleCord[i * 4 + 3];
                ....
    }
    

    【讨论】:

    • 感谢您的关注,我已经更改了代码...(请参阅更新)但我仍然看不到标记...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多