J'ai un problème étrange que je ne sais pas vraiment comment attaquer donc je me demande si quelqu'un a déjà eu un problème similaire auparavant.ItemizedOverlay semble dessiner avec une projection "cassée"
Je remplace la méthode dessiner (Canvas canvas, MapView mapView, shadow booléen) dans une sous-classe ItemizedOverlay pour dessiner des chemins, du texte, etc. entre les éléments. La première chose que je fais dans le remplacement est d'appeler super.draw avec tous ces paramètres. Quand je démarre l'application, les lignes que je dessine dans mon override sont où elles sont censées être, mais les OverlayItems réels que dessine super.draw sont loin. Ce qui est intéressant, c'est que lorsque je déplace la carte vers le coin supérieur gauche (coords 0,0), les OverlayItems se rapprochent de l'endroit où je les attend (en fait, ils semblent parfaitement correspondre quand je reçois le premier point à point (0,0)). Lorsque je déplace la carte pour que les OverlayItems s'éloignent du point (0,0), ils s'éloignent linéairement de leur géolocalisation.
Dans le cas où personne n'a déjà fait face à ce problème et ce n'est pas quelque chose d'évident, je vais essayer de faire un exemple minimal qui a encore ce comportement et le poster ici. Le code réel est relativement grand, donc je voudrais éviter beaucoup de travail si quelqu'un a une idée de ce qui pourrait être le problème.
modifier: une information supplémentaire qui pourrait être utile ... ma méthode de tirage ressemble à ceci:
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
if (!shadow) {
// code for drawing the lines etc.
// on the canvas (uses mapView.getProjection())
}
}
La partie personnalisée de la superposition ne dispose pas d'une couche d'ombre (je l'ai utilisé la même logique lors de l'extension Overlay sans problème). La couche d'ombre qui est dessinée pour les OverlayItems par super.draw est en fait à mi-chemin entre le Drawable et la géolocalisation attendue pour chaque élément particulier.
Voici des captures d'écran de l'avd pour mieux illustrer ce qui se passe. Les quatre broches rouges devraient être sur la ligne rouge au-dessus d'eux et se déplacer vers la ligne que je glisse la carte vers le haut à gauche. Les deux broches et la ligne entre elles sont dessinées dans ma commande personnalisée, super.draw dessine les quatre ombres et les quatre broches rouges supplémentaires.
Puisqu'il s'agit de mon premier article et que je ne peux pas publier plus d'un lien, j'ai placé les trois captures d'écran sur le même fichier jpg.
screenshot
1. Oui, j'appelle mapView.getProjection() comme l'une des premières choses dans la méthode draw et j'utilise l'objet retourné pour la durée de cette méthode draw - cependant, je ne pense même pas que je n'utilise pas la précision la projection pour ma substitution de tirage causerait ce problème puisque le résultat de l'appel super.draw est ce qui me donne des résultats inattendus. 2. oui, j'utilise le même dessin par défaut pour tous les OverlayItems et je le mets dans le constructeur via super (boundCenterBottom (defaultMarker)) –