2012-07-16 6 views
0

Je travaille dans un google maps et je veux tracer une ligne entre deux points J'ai utilisé le code suivant d'une question d'utilisateur dans ce site mais cela n'a pas fonctionné avec moi J'ai près de la force lorsque je retire cette fonction dans la classe interne l'application fonctionneTracer une ligne entre deux points android & google maps

mais je besoin parce que je dois tracer des lignes

le code I utilisé est le suivant:

class MyOverlay extends com.google.android.maps.Overlay { 
    GeoPoint [] geoPointsArray ; 
// constructor 
public MyOverlay(){ 

    } 

@Override 
public void draw(Canvas canvas, MapView mapv, boolean shadow){ 
    super.draw(canvas, mapv, shadow); 

    Paint mPaint = new Paint(); 
    mPaint.setDither(true); 
    mPaint.setColor(Color.RED); 
    mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
    mPaint.setStrokeJoin(Paint.Join.ROUND); 
    mPaint.setStrokeCap(Paint.Cap.ROUND); 
    mPaint.setStrokeWidth(2); 

    GeoPoint gP1 = new GeoPoint(19240000,-99120000); 
    GeoPoint gP2 = new GeoPoint(37423157, -122085008); 

    Point p1 = new Point(); 
    Point p2 = new Point(); 
    Path path = new Path(); 

    projection.toPixels(gP1, p1); 
    projection.toPixels(gP2, p2); 

    path.moveTo(p2.x, p2.y); 
    path.lineTo(p1.x,p1.y); 

    canvas.drawPath(path, mPaint); 
} 

} // fin de la classe interne

je vraiment besoin d'aide, quand je viens d'ajouter ce que je suis une force proche: S

+0

S'il vous plaît voir ma réponse et si vous avez des questions, puis me dire. –

Répondre

1

Essayez cette option pour ajouter un ou plusieurs points à votre superposition et de les remplir avec la couleur rouge.

public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     super.draw(canvas, mapView, shadow); 

     Paint mPaint = new Paint(); 
     mPaint.setDither(true); 
     mPaint.setStyle(Style.FILL_AND_STROKE); 
     mPaint.setColor(Color.RED); 
     mPaint.setAlpha(9); 
     mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(2); 

     Path path = new Path(); 

     Projection projection = mapView.getProjection(); 

     for(int j = 0; j < geoArrayist.size(); j++) 
     { 
      Iterator<GeoPoint> it = geoArrayist.iterator(); 
      while(it.hasNext()) 
      { 
       GeoPoint arrayListGeoPoint = it.next(); 

       Point currentScreenPoint = new Point(); 
       projection.toPixels(arrayListGeoPoint, currentScreenPoint); 

       if(j == 0) 
        path.moveTo(currentScreenPoint.x, currentScreenPoint.y); 
       else 
        path.lineTo(currentScreenPoint.x, currentScreenPoint.y); 
      }     
     } 
     // old_geopoint = new_geopoint; 
     canvas.drawPath(path, mPaint); 
    } 

geoArrayList est une liste de géopoints.

+0

J'ai aimé votre solution mais il y a quand même un problème quand j'ajoute cette fonction l'application arrête de fonctionner et j'obtiens un écran noir dans mon mobile ... c'est ennuyeux car je suis sûr à 90% que le code est correct – user1413188

+0

Testez-le sur un appareil .. et assurez-vous que vous avez inclus la clé api correcte dans votre application. La meilleure chose serait de recréer la clé api pour votre mapView et d'utiliser la nouvelle clé. Cela arrive parfois, et cela m'est arrivé aussi, et le simple fait d'entrer une nouvelle clé d'API l'a fait fonctionner. Je ne sais pas où vous allez exactement mal .. mais cela pourrait être l'une des raisons – pixelscreen

0

Utilisez ci-dessous la réponse de débordement de pile pour dessiner l'itinéraire entre deux points sur la carte Google, il peut vous aider.

Draw Route Path on Google Map

+0

J'ai utilisé votre solution et j'ai eu une erreur dans la ligne de code suivante, où le toPixel ne fonctionne pas pour (int i = 0; mPoints.size(); i ++) { Point point = new Point(); mv.getProjection(). ToPixels (mPoints.get (i), point); x2 = point.x; y2 = point.y; – user1413188

+0

@ user1413188 postez votre erreur logcat –

Questions connexes