MapView上的多层Overlay对象。可能吗?

时间:2011-09-06 14:01:49

标签: android google-maps android-mapview itemizedoverlay

我在地图上有两点:

  1. 用户位置(每次收到新坐标时都会重新绘制)
  2. 可选择的位置,用户可以自己挑选自己(通过在地图上录制)。如果选择了新点,则会立即删除旧点。
  3. 问题:

    当用户选择位置时,Overlay.onTap(GeoPoint p, MapView mapView)已激活。 MapView.getOverlays()接收地图上的所有项目。我需要删除地图上的旧标记,但是没有办法区分哪个重叠对象是旧用户选择的位置,哪个是用户当前位置图标。

    问题:

    无论如何可以在MapView上管理多层Overlay对象吗?

1 个答案:

答案 0 :(得分:1)

您可以通过实现Overlay来创建Multiple子类。现在当前位置是固定的,我认为你不能做任何事情,如onclick等等.1类只显示和维护当前位置。

所以现在选择位置。好吧我想你想改变那个引脚位置的位置。正如您可以使用onTap实现的那样,您可以使用onTouch()方法并为地图实现向下,移动,向上事件,假设我点击地图然后您获得该位置现在将此位置值转换为屏幕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()方法中调用的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);
    }