границы маркера пользовательской карты Android - PullRequest
1 голос
/ 02 апреля 2012

Здравствуйте, я использую уменьшенную версию этого маркера (http://www.clker.com/clipart-orange-pin-4.html) для отображения маркеров на картах Google на Android.

Проблема в том, что я не знаю, как сделать так, чтобы точка маркера соответствовала координатам. Точка стрелки находится примерно в 1/5 от ширины координат и МАКС. Высоты.

вот мой класс

public class GestionaleItemizedOverlay extends com.google.android.maps.ItemizedOverlay {

    public GestionaleItemizedOverlay(Drawable defaultMarker, Context context) {
        //super(boundCenterBottom(defaultMarker));
        super(boundCenter(defaultMarker));
        this.mContext = context;
    }
...

А это

    this.marker_poi = this.getContext().getResources().getDrawable(R.drawable.marker);
    this.marker_poi.setBounds(this.marker_poi.getIntrinsicWidth() / 2, this.marker_poi.getIntrinsicHeight(), this.marker_poi.getIntrinsicWidth() / 2, 0);
 new GestionaleItemizedOverlay(this.poi, this.context);

Нужно ли устанавливать setBounds на маркер перед передачей его в конструктор? и почему super (defaultMarker) заставляет все маркеры не показывать?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2012

Предыдущий ответ правильный, вам нужно поиграть со значением BOUNDS вашего маркера.

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

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

Таким образом, если ваше измененное изображение имеет размер, скажем, 20 x 20, и ваш фактический наконечник стрелки (если изображение является стрелкой, и вы хотите, чтобы оно было точно выровнено с точкой на карте), скажем, в X = 4 и Y = 10, вам необходимо изменить границы вашего изображения соответственно, чтобы «переместить» изображение туда, куда вы хотите.

Так как 0,0 поместит изображение на 4 пикселя вправо и на 10 пикселей ниже фактической точки на карте, с которой вы его ассоциируете, ваши границы не должны быть 0,0, X, Y, но должны быть -4, -10, размер X изображения-4, размер Y изображения-10 (в данном примере xsize изображения и ysize изображения оба равны 20, но должны использовать значения, подходящие для вашего случая.)

1 голос
/ 10 апреля 2012

Да, вам нужно установить setBounds, но вы можете сделать это в конструкторе, это то, что я делаю в конструкторе, чтобы установить его в левом нижнем углу:

public class CustomOverlay extends ItemizedOverlay<CustomOverlayItem> {
    public CustomOverlay(Drawable defaultMarker, Context context) {
        super(defaultMarker);
        defaultMarker.setBounds(0, -defaultMarker.getIntrinsicHeight(), defaultMarker.getIntrinsicWidth(), 0);
    }

Вам нужно будет добавить немного больше к левой стороне границ, чтобы сделать центральную точку в правильном положении. Вы должны помнить, что он установлен в px, поэтому сделайте какой-нибудь DP-конвертер, чтобы он был правильно настроен для ваших разных изображений для каждого размера экрана.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...