Вопрос

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

Я попытался осуществить это, по моей первой попытке, используя setMarker Метод в классе OllyiTem. Как только это не работало, я пытаюсь переопределить getMarker Способ и вернуть соответствующего маркера для представления данных.

Обе эти попытки закончились ничем, набрали на карте ... однако, если они прокомментированы, маркеры рисуют только хорошо (за исключением того, что они, конечно, используют маркер по умолчанию, который не то, что я хочу).

Вот мой код для моего пользовательского класса OlveraliTem (комментированные методы, которые я пробовал, и они не работали):

private class MyOverlayItem extends OverlayItem {
    private Context mContext;
    private MyData mData;

    public MyOverlayItem(GeoPoint point, MyData data, Context context) {
        super(point, data.getWhat(), data.getWhere());
        this.mContext = context;
        this.mData = data;

        /*if(data.getTemp() > 200)
            this.setMarker(res.getDrawable(R.drawable.icon_data_hot_l));
        else if(data.getTemp() > 100)
            this.setMarker(res.getDrawable(R.drawable.icon_data_neutral_l));
        else
            this.setMarker(res.getDrawable(R.drawable.icon_data_frozen_l));*/
    }

    /*@Override
    public Drawable getMarker(int stateBitset) {
        Resources res = this.mContext.getResources();
        if(this.mData.getTemp() > 200)
            return res.getDrawable(R.drawable.icon_data_hot_l);
        else if(this.mData.getTemp() > 100)
            return res.getDrawable(R.drawable.icon_data_neutral_l);
        return res.getDrawable(R.drawable.icon_data_frozen_l);
    }*/
}

Есть ли способ сделать то, что я пытаюсь сделать ... Или мне нужно сделать уникальный класс OllyiTem, соответствующий каждому состоянию моих данных? (EW.)

Это было полезно?

Решение

Я смог привести к появлению маркеров, однако они появляются вверх ногами (по крайней мере, я думаю, что они могут просто быть, что их тень находится в верхнем левом углу, а не в правом нижнем углу).

Все, что мне нужно было сделать, было добавить эту строку:

this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight());

... а также эта строчка, чтобы правильно ориентировать маркеры (я добавил это, когда мой элементарьверлай добавляет элемент Tan Outlay:

overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));

Другие советы

API утверждает, что маркер нуждается в границах для отображения ...

@ TECELESTIALORB Уникальная часть ваших фрагментов работает в одиночестве (или моя работала в любом случае), когда вы используете SetBounds () в одиночку, вы получаете то, что вы говорите, чтобы сделать это ... ограничивающая коробка для вашего маркера. Ориентация на точку опорной точки и теневой части маркера, и т. Д.

Moverlay.Setmarker (Boundcenterbottom (Moverlay.getmarker (0))); Для вас выполняет полную работу, установив границы и центрирующую нижнюю часть маркера на точке (отсюда и название стильного метода).

Сейчас, как к передовым опытам, яркие лампы, чем мне придется перезвонить ...

Попробуйте переопределить onDraw() Способ вашего класса Overlay.

Вот еще один подход:

Googlemaps: пользовательские предметы, детализированные и наложение, правильный способ показать разным маркером

Я думаю, что я предпочитаю этот ответ, хотя ... спасибо!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top