Comment utiliser efficacement ItemizedOverlay
et OverlayItem
dans Android Beta 0.9
Si vous êtes un développeur travaillant avec Android, vous avez peut-être rencontré des difficultés lors de l’implémentation des fonctionnalités ItemizedOverlay
et OverlayItem
dans vos applications de cartes, en particulier dans Android Beta 0.9. Cet article vise à explorer un problème courant dans ce contexte et à présenter une solution détaillée qui vous aidera à faire fonctionner ces marqueurs de carte sans problème.
Le Problème
En essayant d’utiliser ItemizedOverlay
pour créer des marqueurs sur votre carte (similaires à ceux vus dans Google Maps), vous avez peut-être remarqué que les marqueurs n’apparaissent pas comme prévu. Voici le scénario avec lequel vous pourriez être familier :
- Vous avez configuré votre classe
MyItemizedOverlay
qui étendItemizedOverlay
. - Lorsque vous tentez d’ajouter cet overlay à votre
MapView
, il n’affiche aucun marqueur malgré l’extraction réussie desOverlayItems
.
Voici un extrait du code que vous pourriez utiliser pour ajouter l’overlay :
private void addItemizedOverlay() {
Resources r = getResources();
MapView mapView = (MapView)findViewById(R.id.mymapview);
List<Overlay> overlays = mapView.getOverlays();
MyItemizedOverlay markers = new MyItemizedOverlay(r.getDrawable(R.drawable.icon));
overlays.add(markers);
OverlayItem oi = markers.getItem(0);
markers.setFocus(oi);
mapView.postInvalidate();
}
Définition de la Classe
Votre classe MyItemizedOverlay
pourrait être définie comme suit :
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
public MyItemizedOverlay(Drawable defaultMarker) {
super(defaultMarker);
populate();
}
@Override
protected OverlayItem createItem(int index) {
Double lat = (index + 37.422006) * 1E6;
Double lng = -122.084095 * 1E6;
GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());
OverlayItem oi = new OverlayItem(point, "Marqueur", "Texte du Marqueur");
return oi;
}
@Override
public int size() {
return 5;
}
}
La Solution : Définir les Limites de Votre Drawable
Le problème clé réside souvent dans l’absence de limites définies pour le Drawable
associé à vos marqueurs. Voici comment le résoudre :
Étape 1 : Définir les Limites du Drawable
Avant d’ajouter votre ItemizedOverlay
, assurez-vous de spécifier les limites pour votre drawable. Cela est crucial car la méthode draw
du drawable dépend de ces limites pour se rendre correctement sur le canevas. Voici comment vous pouvez le faire :
Drawable defaultMarker = r.getDrawable(R.drawable.icon);
// Définir les limites pour votre drawable
defaultMarker.setBounds(0, 0, defaultMarker.getIntrinsicWidth(),
defaultMarker.getIntrinsicHeight());
MyItemizedOverlay markers = new MyItemizedOverlay(defaultMarker);
overlays.add(markers);
Pourquoi les Limites Sont-elles Importantes ?
- Mécanismes de Rendu : Les marqueurs sont dessinés via la méthode
Drawable.draw(Canvas)
, qui nécessite que des limites soient spécifiées afin que le drawable sache où se rendre sur le canevas. - Visibilité : Sans limites appropriées, vos marqueurs peuvent ne pas apparaître sur la carte, ce qui peut conduire à de la confusion au cours du processus de développement.
Ressources Supplémentaires
Pour des références supplémentaires et un guide détaillé, vous pouvez consulter les ressources suivantes :
Conclusion
En définissant correctement les limites de votre Drawable
, vous devriez constater que votre ItemizedOverlay
fonctionne comme prévu, affichant les marqueurs sur votre carte. Cette correction est essentielle pour les développeurs confrontés à des problèmes similaires dans Android Beta 0.9, garantissant une expérience de développement plus fluide lors de l’implémentation des fonctionnalités de carte dans vos applications.
Si vous avez d’autres questions ou si vous souhaitez partager vos expériences concernant l’implémentation d’ItemizedOverlay
, n’hésitez pas à commenter ci-dessous !