3

マップ プロジェクトに線を引こうとしていますが、線を引くことができません。オーバーレイを宣言する場所と方法は? いろいろな方法を試しましたが、うまくいきません。つまり、コードは Eclipse でエラーを表示するだけです。私がしようとしているのは、A から B へのルートを描くことではなく、移動しながらルートを描くことです。

// Creating a MapView
public class Gpstrack extends MapActivity {
    private MapView map;
    private MapController controller;
    private Projection projection;
    ArrayList<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        initMapView();
        initMyLocation();


        TabHost.TabSpec spec;

        TabHost th = (TabHost)findViewById(R.id.tabhost);
        th.setup();

        spec = th.newTabSpec("tag1");
        spec.setContent(R.id.map_Tab);
        spec.setIndicator("Map");
        th.addTab(spec);

        spec = th.newTabSpec("tag2");
        spec.setContent(R.id.log_Tab);
        spec.setIndicator("Log");
        th.addTab(spec);

        spec = th.newTabSpec("tag3");
        spec.setContent(R.id.details_Tab);
        spec.setIndicator("Details");
        th.addTab(spec);

        spec = th.newTabSpec("tag4");
        spec.setContent(R.id.student_Tab);
        spec.setIndicator("Student Info");
        th.addTab(spec);

    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

    //Map and Controls
    private void initMapView() {
        map = (MapView) findViewById(R.id.mvMain);
        controller = map.getController();
        map.setSatellite(true);
        //map.setStreetView(true);
        map.setBuiltInZoomControls(true);
    }


    //Creates an Overlay that marks current position
    private void initMyLocation() {
        final MyLocationOverlay overlay = new MyLocationOverlay(this, map);

        overlay.enableMyLocation();
        overlay.enableCompass();
        overlay.runOnFirstFix(new Runnable() {
            public void run() {
                controller.setZoom(17);
                controller.animateTo(overlay.getMyLocation());
                map.getOverlays().add(overlay);



            }

        });

    }


    //Experiment
    class MyOverlay extends Overlay {
        public void draw(Canvas canvas, MapView mapv, boolean shadow) {
            super.draw(canvas, mapv, shadow);
            Projection projection = mapv.getProjection();
            Path p = new Path();



            for (int i = 0; i < geoPointsArray.size(); i++) {
                if (i == geoPointsArray.size() -1) {
                    break;
                }
                Point from = new Point();
                Point to = new Point();
                projection.toPixels(geoPointsArray.get(i), from);
                projection.toPixels(geoPointsArray.get(i + 1), to);
                p.moveTo(from.x, from.y);
                p.lineTo(to.x, to.y);
                }

            Paint mPaint = new Paint();
            mPaint.setStyle(Style.STROKE);
            mPaint.setColor(Color.GREEN);
            mPaint.setAntiAlias(true);
            mPaint.setStrokeWidth(5);
            canvas.drawPath(p, mPaint);
            mapv.invalidate();
            super.draw(canvas, mapv, shadow);


        }
    }       
}
4

3 に答える 3

1

このデモでGoogle マップ オーバーレイを実装してみてください。

このデモでアイデアが得られたことを願っています。

楽しみ。:)

于 2012-04-26T04:34:52.343 に答える
0

オーバーレイクラスでは、このように線を引くことができます

public class MapOverlay extends com.google.android.maps.Overlay

    {
        Canvas canvas;

        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
                long when)
        {
            // TODO Auto-generated method stub
             super.draw(canvas, mapView, shadow);
            this.canvas=canvas;
            Point screenpoint = new Point();

             mapView.getProjection().toPixels(p, screenpoint);
             Bitmap bmp = BitmapFactory.decodeResource(
                        getResources(), R.drawable.pushpin);            
                    canvas.drawBitmap(bmp, canvas.getWidth()/4, 
                            canvas.getHeight()/4, null);  

                    Paint paint = new Paint();
                    paint.setColor(Color.BLACK);
                    canvas.drawLine(canvas.getWidth()/4, canvas.getHeight()/4,
                            canvas.getWidth()/2, canvas.getHeight()/2, paint);
                    return true;

        }  


        return true;
    }    



    }

線を引く機能は次のようなものです

 public void drawLine (float startX, float startY,
 float stopX, float stopY, Paint paint) 
    Since: API Level 1 Draw a line segment with the specified start and stop x,y coordinates, using the specified paint. 

    Parameters
    startX  The x-coordinate of the start point of the line 
    startY  The y-coordinate of the start point of the line 
    paint  The paint used to draw the line  

パスを描きたい場合は、この質問を参照できます

J2ME/Android/BlackBerry - 運転ルート、2 つの場所間のルート

于 2012-04-26T04:45:24.147 に答える
0

このリンクを試す必要があると思います Google マップでの線/パスの描画 と、このJ2ME/Android/BlackBerry - 運転ルート、2 つの場所間のルート.これが役立つと思います。

于 2012-04-26T06:50:54.930 に答える