2010-09-29 16 views
2

J'essaye d'ajouter mon propre drawable et l'emploie dans une série de superpositions sur un MapView. Le drawable est fondamentalement une boîte arrondie avec un contour noir et un nombre au milieu.Dessin artefact étrange utilisant dessinable avec MapView

Je suis parvenu à réaliser ceci en utilisant le code ci-dessous, mais il y a ce qui ressemble à un drapeau à gauche de ma boîte, que je ne pense pas avoir dessiné - donc je me demande ce que ça peut être .

Voici un exemple de l'image: alt text


Edit - c'est ce qui se passe si un cercle est dessiné: alt text


Mon code est ci-dessous:

Tirable personnalisé:

public class BikeDrawable extends Drawable { 
    int colour; 
    String bikes; 

public BikeDrawable (int bikes){ 
    this.bikes = Integer.toString(bikes); 
    if (bikes < 4) { 
     colour = Color.RED; 
    } 
    else if (bikes > 3 && bikes < 9){ 
     colour = Color.argb(244, 255, 127, 42); 
    } 
    else { 
     colour = Color.GREEN; 
    } 
} 
@Override 
public void draw(Canvas canvas) { 
     Paint rectanglePaint = new Paint(); 
     rectanglePaint.setColor(colour); 
     rectanglePaint.setStyle(Style.FILL); 
     RectF rectangle = new RectF(0.0f, 0.0f, 20.0f, 20.0f); 
     Paint strokepaint = new Paint(); 
     strokepaint.setStyle(Paint.Style.STROKE); 
     strokepaint.setStrokeWidth(2); 
     strokepaint.setARGB(255, 0, 0, 0); 

     canvas.drawRoundRect(rectangle, 4.0f, 4.0f, rectanglePaint); 
     canvas.drawRoundRect(rectangle, 4.0f, 4.0f, strokepaint); 

     Paint textpaint = new Paint(); 
     textpaint.setARGB(255, 0, 0, 0); 
     textpaint.setTextAlign(Paint.Align.CENTER); 
     canvas.drawText(bikes, 10, 14, textpaint); 
} 

@Override 
public int getOpacity() { 
    return 0; 
} 

@Override 
public void setAlpha(int alpha) { 
} 

@Override 
public void setColorFilter(ColorFilter cf) { 
} 

} 

Utilisation dans MapView:

bikeOverlay = new PointsOverlay(start_icon); 
BikeDrawable start_1_drawable = new BikeDrawable (start_1.capacity); 
OverlayItem start_1_overlayitem = new OverlayItem(new GeoPoint(start_1.lat,start_1.lon), null, null); 
start_1_overlayitem.setMarker(start_1_drawable); 
mapOverlays.add(bikeOverlay); 
bikeOverlay.addOverlay(start_1_overlayitem); 

Est-ce que quelqu'un a une idée ce qui se passe ici? Est-ce un artefact d'OverlayItem?

+0

Curieux. Si vous modifiez les appels de drawRoundedRect vers autre chose (par exemple, un cercle), voyez-vous toujours le problème? – I82Much

+0

oui, la même chose arrive, juste plus circulaire. Je vais ajouter le graphique à la requête d'origine –

+1

OverlayItem peut dessiner une ombre, c'est peut-être ce qui cause votre problème. Essayez de l'éteindre, je pense que c'est possible. Bien que je suppose que c'est déjà résolu par pas ou personne ne s'en soucie. – etteyafed

Répondre

0

Ceci a été réalisé en remplaçant le tirage au sort() de la PointsOverlay comme suit:

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) 
{ 
    if(!shadow) 
    { 
     super.draw(canvas, mapView, false); 
    } 
} 

Merci à etteyafed - vous, je serais crédité des points si vous aviez répondu, mais je voulais fermer cette de.