2012-04-22 17 views
0

我正在嘗試創建一個GPS跟蹤應用程序,並停留在如何繪製從前一點到當前點的一條線上。我已經使用疊加試過,但它不顯示...我不是Java的那麼好,像我4歲,所以請跟我說話......如何在Android谷歌地圖上繪製一條從前一點到當前點的線?

@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.mapTab); 
    spec.setIndicator("Map"); 
    th.addTab(spec); 

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

    spec = th.newTabSpec("tag3"); 
    spec.setContent(R.id.detailsTab); 
    spec.setIndicator("Details"); 
    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 
public class detailsTab extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.id.detailsTab); 

     LocationManager locationManager; 
     String context = Context.LOCATION_SERVICE; 
     locationManager = (LocationManager)getSystemService(context); 

     String provider = LocationManager.GPS_PROVIDER; 
     Location location = locationManager.getLastKnownLocation(provider); 
     updateWithNewLocation(location); 
    } 

    private void updateWithNewLocation(Location location) { 
     String latLongString; 
     TextView myLocationText; 
     myLocationText = (TextView)findViewById(R.id.detailsText); 
     if(location != null){ 
      double lat = location.getLatitude(); 
      double lng = location.getLongitude(); 
      latLongString = "Lat:" + lat + "\nLong" + lng; 
     } 
     else { 
      latLongString = "No Location Found"; 
     } 
     myLocationText.setText("Your current position is: \n" + latLongString); 
    } 
} 

public class NewOverlay extends Overlay { 
    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
     Projection projection = mapView.getProjection(); 

     Double lat = lati *1E6; 
     Double lng = longi *1E6; 

     GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue()); 

     if (shadow == false) { 
      Point myPoint = new Point(); 
      projection.toPixels(geoPoint, myPoint); 

      //Creating and setting up the paint brush 
      Paint paint = new Paint(); 
      paint.setARGB(250, 255, 0, 0); 
      paint.setAntiAlias(true); 
      paint.setFakeBoldText(true); 

      //Create circle 
      int rad = 25; 
      RectF oval = new RectF(myPoint.x-rad, myPoint.y-rad, myPoint.x+rad, myPoint.y+rad); 

      canvas.drawOval(oval, paint); 
      canvas.drawText("Red Circle", myPoint.x+rad, myPoint.y, paint); 


     } 

    } 
} 

}

+0

您是否試圖在移動時畫線 – 2012-04-22 02:18:32

+0

是的,我需要應用程序繪製路徑,因爲我沿着 – sKwok12 2012-04-22 12:53:26

回答

1

我這樣做,這樣一來,裏面draw()方法,

  int x1 = -1, y1 = -1, x2 = -1, y2 = -1; 
      Paint paint = new Paint(); 
      paint.setColor(Color.rgb(0x7b, 0x7b, 0xff)); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeWidth(5); 
      if(mPoints!=null || mPoints.size()<2) 
      { 
      for (int i = 0; i < mPoints.size(); i++) { 
        Point point = new Point(); 
        mv.getProjection().toPixels(mPoints.get(i), point); 
        Point loc = new Point(); 
        mv.getProjection().toPixels(new GeoPoint((int) (location.getLatitude()*1.0E6),(int) (location.getLongitude()*1.0E6)), loc); 
        x2 = point.x; 
        y2 = point.y; 
        if (i == 0) 
        { 
         x2 = loc.x; 
         y2 = loc.y; 
        } 
        if (i > 0) { 
         canvas.drawLine(x1, y1, x2, y2, paint); 
        } 
        x1 = x2; 
        y1 = y2; 

      } 
      } 

此代碼將畫對我來說是整條路線,mPointsGeoPoint數組,我想提請他們。這應該對你有用。

0
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); 
}//draw() 

我們可以使用上面的方法來繪製路線,因爲我們將地點移動到位。 geoPointsArray是接收位置的數組。在你的onCreate()你需要調用mapv.invalidate();連續繪製路線

+0

您可以使用代碼? – 2012-04-22 12:55:01

+0

我已經使用了你的方法,而且我仍然收到錯誤。你能幫助把它融入我的項目上面嗎?我嘗試在我的onCreate()中調用mapv.invalidate(),但我仍然返回錯誤。 我也從geoPointsArray獲得錯誤,但我無法導入任何東西。有任何想法嗎? – sKwok12 2012-04-22 13:58:56

相關問題