несколько оверлейных элементов не отображаются на карте в Android - PullRequest
2 голосов
/ 11 августа 2011

вот код, который я использую в своей деятельности, чтобы показать несколько маркеров на виде карты.я использовал класс customoverlay, который расширяет itemized overlays.Вот код для этого класса:

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();
    }
}

Я использую этот класс в основной активности пользовательского интерфейса.Вот как я использую этот класс для добавления наложений к моему виду карты:

ОБНОВЛЕНИЕ

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 оверлейных элементов и добавляю их в оверлей и добавляю оверлей один раз в конце.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Независимо от 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];
            ....
}
0 голосов
/ 11 августа 2011

Вы пропали без вести:

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();
    }

}
...