Android 地图视图上的第二层覆盖

Android 地图视图上的第二层覆盖,android,google-maps,overlay,Android,Google Maps,Overlay,我有一个Android MapView,其中我需要在MapView已经处理过的管脚上有第二层叠加管脚 为了实现这一点,我在MapView上放置了一个框架布局,并在该布局中放置了作为ImageView的接点 我已重写ImageView的Draw()方法,以便在贴图移动时更新它们的位置(以便管脚随之移动),如下所示: public void draw(Canvas canvas) { if(mCoordinates != null && mapView != null){

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

为了实现这一点,我在MapView上放置了一个框架布局,并在该布局中放置了作为ImageView的接点

我已重写ImageView的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);
}
问题是:视图更新太慢,所以当我移动地图时,图钉似乎落后于它


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

我有一个应用程序,它使用多个覆盖层来完成这项工作。每个覆盖都会根据需要进行处理。在处理结束时,函数调用映射更新例程。下面是更新例程的框架

    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是通过按钮切换的布尔值)


也许你可以使用这个主题的一个变体,将一个逐项覆盖作为分层覆盖的一个?

最后,我们设计了一种方法,每次都会对覆盖进行排序,以便总是先绘制大覆盖,然后再绘制小覆盖。

谢谢你的回答,但正如我说的,我不能使用MapView.getOverlays(),由于应用程序中的特定要求