Пользовательский OverlayItem не рисует

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

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

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

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

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);
    }*/
}

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

9
задан RedBlueThing 11 August 2010 в 01:16
поделиться

3 ответа

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

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

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

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

overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));
4
ответ дан 4 December 2019 в 22:26
поделиться

Попробуйте переопределить метод onDraw () вашего класса наложения.

1
ответ дан 4 December 2019 в 22:26
поделиться

API заявляет, что Маркер должен отображать границы ...

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

mOverlay.setMarker (boundCenterBottom ( mOverlay.getMarker (0))); выполняет всю работу за вас, устанавливая границы и центрируя нижнюю часть маркера на точке (отсюда и стильное название метода).

Теперь, что касается передового опыта, более ярких лампочек, чем мне придется перезвонить ...

2
ответ дан 4 December 2019 в 22:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: