2010-07-08 43 views
3

Je veux être en mesure d'obtenir une référence à l'objet curent en cours d'élaborationObtenir OverlayItem courant utilisé

@Override 
     public void draw(Canvas canvas, MapView mapView,boolean shadow) { 
      //Log.i("DRAW","MARKER"); 
      super.draw(canvas, mapView, false); 
     } 

ci-dessus est ma méthode de tirage au sort et je veux étendre la méthode de saisie pour écrire le titre en dessous de chaque article par exemple. Cela nécessiterait la méthode .getTitle() de OverlayItem. Peut-être un certain suivi des objets en dehors de cette méthode, mais ne savez pas où le mettre ....

Répondre

0

J'ai fait quelque chose de similaire. J'ai ajouté quelques marqueurs à un MapView et ensuite je les ai connectés avec une ligne. J'ai une classe LineOverlay qui s'étend Overlay. Dans le constructeur, il obtient la liste des éléments à connecter par lignes.

Quelque chose comme:

public LineOverlay(ItemizedOverlay<? extends OverlayItem> itemizedOverlay, int lineColor) { 
    mItemizedOverlay = itemizedOverlay; 
    colorRGB = lineColor; 
    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    mPaint.setColor(colorRGB); 
    mPaint.setStrokeWidth(LINE_WIDTH); 
} 

puis sur le onDraw() que je fais ceci:

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    if (mItemizedOverlay.size() == 0 || mItemizedOverlay.size() == 1) 
     return; 

    Projection projection = mapView.getProjection(); 

    int i = 0; 

    while(i < mItemizedOverlay.size() - 1){ 
     OverlayItem begin = mItemizedOverlay.getItem(i); 
     OverlayItem end = mItemizedOverlay.getItem(i+1); 
     paintLineBetweenStations(begin,end,projection,canvas); 
     i++; 
    } 

    super.draw(canvas, mapView, shadow); 
} 

private void paintLineBetweenStations(OverlayItem from, OverlayItem to, Projection projection, Canvas canvas){ 
    GeoPoint bPoint = from.getPoint(); 
    GeoPoint ePoint = to.getPoint(); 

    Point bPixel = projection.toPixels(bPoint, null); 
    Point ePixel = projection.toPixels(ePoint, null); 

    canvas.drawLine(bPixel.x, bPixel.y, ePixel.x, ePixel.y, mPaint); 
} 

Dans votre cas, vous pouvez faire quelque chose de similaire créant une SubtitleOverlay qui étend Overlay qui reçoit tous les éléments du constructeur, puis sur la méthode draw créer un sous-titre dans la bonne position.

+0

J'ai beaucoup vu cet exemple et je peux voir comment cela tracerait une ligne entre les points. Je ne vois pas comment utiliser getTitle et récupérer le nom pour l'écrire et plus important encore au bon moment. –

+0

@Lee Armstrong Dans la méthode draw, vous pouvez appeler: 'mItemizedOverlay.getItem (i) .getTitle()' pour obtenir le titre. La position où dessiner peut être faite avec les informations de '.getPoint()' et 'projection.toPixels'. – Macarse

+0

merci. Je comprends ce que tu veux dire maintenant. Jetez un oeil à cela ... http://www.john-ambler.com/ais/google.html Comment est-ce que je pourrais dessiner ces types de polylignes qui ne sont pas connectés? –