2012-04-26 3 views
3

Я пытаюсь нарисовать линию на моем проекте карты, но не могу получить линию для рисования. Где и как объявить оверлей? Я пробовал различные методы, но не могу заставить его работать. т.е. код просто отображает ошибки в Eclipse. То, что я НЕ пытаюсь сделать, это нарисовать маршрут от А до Б, а скорее нарисовать маршрут, пока я двигаюсь.Как нарисовать линию Наложение на Google Maps Android

// 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); 


     } 
    }  
} 
+1

Какая ошибка показывает нам ваш лог-кот. – Nitin

+0

Это не ошибка вывода, он говорит: «Метод add (Overlay) в типе Список не применим для аргументов (boolen) – sKwok12

+0

Я думаю, вам следует внедрить прослушиватель изменений местоположения. – Nitin

ответ

1

Пожалуйста этим руководством Android Google MapView Tutorial — Done Right!

+0

Можете ли вы указать местонахождение в код, который мне нужен, чтобы объявить оверлей? – sKwok12

+0

Определите оверлей в отдельном файле класса, а затем объявите его экземпляр в OnCreate в MapActivity, добавьте его для наложения карт – Habib

+0

Не мог ли я сделать это в том же файле класса? – sKwok12

1

Вы попробуйте с этим демо для реализации Google Map Overlay.

Надеюсь, у вас появилась идея с этой демонстрацией.

Наслаждайтесь. :)

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 

и вы можете Reffer это quetion, если вы хотите, чтобы нарисовать путь

J2ME/Android/BlackBerry - driving directions, route between two locations

0

Я думаю, вы должны попробовать эту ссылку Drawing a line/path on Google Maps и этот J2ME/Android/BlackBerry - driving directions, route between two locations. Я думаю, это должно вам помочь.

+0

То, что я не пытаюсь сделать, это нарисовать маршрут от От А до В, а скорее протягивай маршрут, пока я двигаюсь. – sKwok12

Смежные вопросы