Как я могу показать разные маркеры на карте?

Я показываю маркеры на карте. Я не уверен, как я могу указать другой ресурс для рисования для разных маркеров?

Я хотел бы показать зеленую булавку, если расстояние до местоположения ‹ 50 и т. д. и т. д.

pin = getResources().getDrawable(R.drawable.pushpin);
        itemizedOverlay = new MyItemizedOverlay(pin, mapView);

        for (Record element : list) {
            GeoPoint point;
            OverlayItem overlayItem;

            double lat = Double.parseDouble(element.getLatitude());
            double lng = Double.parseDouble(element.getLongitude());
            double locationDistance = Double.parseDouble(element.getLocationDist());

            geoPoint.add(new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)));
            listOfOverlays = mapView.getOverlays();
            point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
            Log.i("deep", "deep    " + point);

            overlayItem = new OverlayItem(point, "", element.getTitle());
            if(locationDistance < 50){
                //green
            }
            else if(locationDistance > 50 && locationDistance < 100){
                //yellow
            }
            else if(locationDistance > 100 && locationDistance < 150){
                //blue
            }

person Sheehan Alam    schedule 15.11.2010    source источник


Ответы (3)


Я смог установить пользователя setMarker(). Смотрите ответ №3:

Маркеры с разными именами на карте Google Android

person Sheehan Alam    schedule 17.11.2010

Я нашел решение для правильной работы метода setMarker:

Drawable drawable = getResources().getDrawable(R.drawable....);  
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
overlayItem.setMarker(drawable); 
person aaa    schedule 09.11.2012

Шаг №1: Создайте свой собственный подкласс OverlayItem

Шаг 2. Переопределите getMarker() и верните нужное изображение.

Вот пример проекта, демонстрирующий это.

person CommonsWare    schedule 15.11.2010
comment
@CommonsWare, а как насчет расширения ItemizedOverlay? Вы бы не рекомендовали идти по этому пути по какой-либо причине? - person McStretch; 16.11.2010
comment
@McStretch: вы можете переопределить onDraw(). Однако, ИМХО, для OverlayItem было бы более разумно иметь бизнес-логику для того, какой значок он использует, а не для того, чтобы ItemizedOverlay имел все эти правила. Но это основано на ограниченной информации о дизайне, поэтому в данном случае мой внутренний инстинкт может ошибаться. - person CommonsWare; 16.11.2010
comment
Почему я не могу вызвать overlayItem.setMarker(drawable)? //кстати не работает - person Sheehan Alam; 16.11.2010
comment
@Sheehan Alam: кажется, я столкнулся с проблемами с setMarker(), но забыл подробности. - person CommonsWare; 16.11.2010
comment
@CommonsWare: как мне переопределить getMarker(), передать ли ему свое местоположение и вернуть соответствующий ресурс? - person Sheehan Alam; 16.11.2010
comment
@Sheehan Alam: я недостаточно знаю о вашем приложении, чтобы предложить реализацию. Однако вы не можете изменить сигнатуру метода getMarker(). Следовательно, OverlayItem необходимо знать свое расстояние или любые критерии, которые вы используете. - person CommonsWare; 16.11.2010
comment
@CommonsWare: Итак, чтобы OverlayItem знал мое местоположение, я должен, вероятно, установить там приватную переменную и получить внутренний доступ к ней с помощью getMarker()? - person Sheehan Alam; 16.11.2010
comment
@CommonsWare: я опробовал ваше решение. Хотя я могу добавить графику под своей канцелярской кнопкой, я хотел бы в конечном итоге заменить свою канцелярскую кнопку в зависимости от расстояния до местоположения. Есть ли способ сделать это? - person Sheehan Alam; 16.11.2010
comment
@Sheehan Alam: Пожалуйста, посмотрите пример проекта, на который я ссылаюсь, который позволяет пользователю переключать любой маркер между его исходным маркером и новым. - person CommonsWare; 16.11.2010