Несколько слоев объектов Overlay на MapView. Является ли это возможным? - PullRequest
0 голосов
/ 06 сентября 2011

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

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

Проблема:

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

Вопрос:

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

1 Ответ

1 голос
/ 06 сентября 2011

вы можете создать подкласс Multiple с помощью наложения. Теперь текущее местоположение было исправлено, и я думаю, что вы не можете делать какие-либо события, такие как 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);
    }
...