Несколько слоев объектов Overlay в MapView. Является ли это возможным?

У меня есть две точки на карте:

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

Проблема:

Когда пользователь выбирает местоположение, активируется Overlay.onTap(GeoPoint p, MapView mapView). MapView.getOverlays() получает все элементы на карте. Мне нужно удалить старый маркер на карте, но нет способа сделать разницу, какой объект наложения является старым выбранным пользователем местоположением, а какой - значком текущего местоположения пользователя.

Вопрос:

Можно ли в любом случае управлять несколькими слоями объектов Overlay в MapView?


person Indrek Kõue    schedule 06.09.2011    source источник


Ответы (1)


вы можете создать подкласс Multiple с реализацией Overlay. Теперь текущее местоположение было исправлено, и я думаю, что вы не можете выполнять какие-либо события, такие как onclick или т. Д. 1 класс, который отображает и поддерживает только текущее местоположение.

Итак, теперь о выборе места. Хорошо, я думаю, вы хотите изменить расположение этого контакта. Поскольку вы можете реализовать onTap для этого, вы можете использовать метод onTouch() и реализовать событие down, move, up для карты, предположим, если я нажму на карту, тогда вы получите это местоположение, теперь преобразуйте это значение местоположения в экран x, y значение добавляет пропуск к булавке, чтобы разместить ее на этом месте.

здесь у меня есть такой способ для размещения булавки на карте, когда пользователь нажимает на карту

public boolean onTouchEvent(MotionEvent event, final MapView mapView) {
    final int action=event.getAction();
    final int x=(int)event.getX();
    final int y=(int)event.getY();
    result = false;
    if (action==MotionEvent.ACTION_DOWN) {
        downPressed = true;
        drag = false;
        result = false;
    }else if (action==MotionEvent.ACTION_MOVE) {
        downPressed = false;
        drag=true;
    }else if (action==MotionEvent.ACTION_UP) {
        if(downPressed){
                if(task.equals(SINGLE_LOCATION) | isDirectionPoint | mapView.isStreetView()){
                    tempPoint = mapView.getProjection().fromPixels(x, y);
                    mapView.invalidate();
                }
            }

            drag = false;
            downPressed = false;
    }
    return(result | super.onTouchEvent(event, mapView));
}

вот мой метод рисования, который был вызван в методе draw()

private void drawFreeMarker(Canvas canvas, MapView mapView, boolean shadow) {
        Point screenPts = new Point();
        mapView.getProjection().toPixels(tempPoint, screenPts);
        //---add the marker---
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bluepin_38);
        canvas.drawBitmap(bmp, screenPts.x-((xCurLocOffset/2)-1), screenPts.y-(yCurLocOffset-1), null);
    }
person Pratik    schedule 06.09.2011