地图视图上的第二层叠加层

时间:2011-11-28 23:12:14

标签: android google-maps overlay

我有一个Android MapView,我需要在MapView已经处理过的第二层叠加引脚上。

为了实现这一点,我在MapView上放置了一个FrameLayout,并将我的引脚作为ImageViews放置在该布局中。

我已经覆盖了ImageViews的Draw()方法,以便在地图移动时更新它们的位置(以便引脚随之移动),如下所示:

public void draw(Canvas canvas) {
    if(mCoordinates != null && mapView != null){
        LayoutParams mParams = (LayoutParams)this.getLayoutParams();
        mapView.getProjection().toPixels(mCoordinates, newPosition);
        mParams.leftMargin = newPosition.x;
        mParams.topMargin = newPosition.y;
    }
    super.draw(canvas);
}

问题:视图更新速度太慢,所以当我移动地图时,引脚似乎落后于它。

有关方法或实施的任何见解欢迎

2 个答案:

答案 0 :(得分:0)

我有一个使用多个叠加层来完成这项工作的应用。根据需要处理每个叠加层。在处理结束时,函数调用映射更新例程。这是更新例程的框架。

    private void updateMap() {
    GeoPoint geoPoint;
    overlayList = mapView.getOverlays();
    overlayList.clear();
    locationOverlay = new MapOverlay();
    pushpinOverlay = new MapOverlay();
    arrowOverlay = new ArrowOverlay();
    tapOverlay = new TapOverlay();
    if (hasCurrentPosition) {
        locationOverlay.setDrawId(R.drawable.man);
        geoPoint = new GeoPoint(currentLatitudeE6, currentLongitudeE6);
        locationOverlay.setPointToDraw(geoPoint);
        if (isFirstFix) {
            mapController.animateTo(geoPoint);
            isFirstFix = false;
        }
    }
    if (hasPushpinPosition) {
        pushpinOverlay.setDrawId(R.drawable.locationmarker);
        geoPoint = new GeoPoint(pushpinLatitudeE6, pushpinLongitudeE6);
        pushpinOverlay.setPointToDraw(geoPoint);
    }
    calcDistance();
    if (findFlag) {
        calcArrowRotation();
    }
    setStatusMessage();
    overlayList.add(locationOverlay);
    overlayList.add(pushpinOverlay);
    if (findFlag) {
        overlayList.add(arrowOverlay);
    }
    overlayList.add(tapOverlay);
    mapView.invalidate();
}

点击叠加层是“顶部”叠加层,必须最后添加。 jpushpin和位置图像被“锁定”到地图上,因为它们被指定为lat和long。点击叠加层返回被点击的地图点,而不是屏幕点。箭头位于屏幕上的位置,仅旋转,不会水平或垂直移动。此外,用户可以打开和关闭箭头覆盖(findFlag是一个按钮切换的布尔值)。

也许您可以将此主题的变体与逐项叠加层一起用作分层叠加层之一?

答案 1 :(得分:0)

最后,我们只是疯狂一种方法,每次都会对叠加进行排序,以便始终先绘制大叠加层,然后再叠加小叠加层。