2

マップ上のルートを再描画するプロセッサの作業を減らすために、Path クラスを使用します。そして、1 つの ZoomLevel に対して 1 つのパスを保存したいと考えています。Key = ZoomLevel の SparseArray にパスを保存し、コードは次のようになります

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        if (shadow){
            return;
        }
        else 
            if(route==null){
                return;
            }
            drawPath(mapView, canvas);
    }


    private void drawPath(MapView mv, Canvas canvas) {
        Point point = new Point();

         if (pathMap.get(gMapView.getZoomLevel())==null){           

            List<GeoPoint> list = null;
            Projection p = mv.getProjection();

            List<RouteMachine.Section> routeArray = route.getSections();
            p.toPixels(routeArray.get(0).getPoints().get(0), point);

            Point rememberThisPoint = new Point(point.x,point.y);

            Path path = new Path();
            path.moveTo(point.x,point.y);
            for (RouteMachine.Section section : routeArray) {
                list = section.getPoints();
                for (int i=1; i < list.size(); i++) {
                    p.toPixels(list.get(i), point);
                    path.lineTo(point.x, point.y);
                }
            }
            pathMap.put(gMapView.getZoomLevel(), path, rememberThisPoint);
         }
         else{
            mv.getProjection().toPixels(route.getSections().get(0).getPoints().get(0), point);
            pathMap.offset(gMapView.getZoomLevel(),point);
         }
        canvas.drawPath(pathMap.get(gMapView.getZoomLevel()),mPaint);

        } 

異なる zoomLevels では、機能するか機能しません。レベルが変わりますが、パスは前のレベルからのパスのように見えます。私は、ズームレベルがラペイントをマップする前に時々変更されるために起こると思います。そして、パス計算はこの 2 つのアクションの間で機能します。ZoomLewel は変更されましたが、地図はまだ塗りつぶされていません。どうすればこれを修正できますか?

4

2 に答える 2

1

を使用してズーム レベルをテストする際の問題getZoomLevel()は、ズームの変更を要求するとすぐに新しいズーム レベルが返されることですが、マップ イメージは段階的なサイズ変更のアニメーションを通過するため、完了するまでに時間がかかります。

ただし、getProjection().fromPixels()はアニメーション中でも正しい投影値を返すため、アニメーションの終了を確認するために使用できます。

次の行を使用してテストします。

    pathInitialLonSpan = projection.fromPixels(0,mapView.getHeight()/2).getLongitudeE6() - 
            projection.fromPixels(mapView.getWidth(),mapView.getHeight()/2).getLongitudeE6();

マップの中心レベルでの経度スパンを返します。この値は、ズーム変更アニメーション中に変更され、zomm が終了すると一定になります。

これを使用して、アニメーションが終了する時間を検証し、パスを作成します。

よろしく。

于 2012-11-14T12:35:56.290 に答える
0

準備が整ったライブラリを使用する場合は、 max を設定できるため、その後は教訓を得ることができます。

これを見てください。

そうしないと

次のようにして最大レベルを取得できます。

リンク 1

リンク 2

于 2012-11-14T12:28:38.997 に答える