Bonjour,

Comme beaucoup, j'utilise WM pour ANDROID car cela me permet de développer très rapidement des applications sans avoir à utiliser le SDK.

Malgré de gros efforts pour intégrer progressivement les fonctionnalités du SDK dans WM, il est parfois nécessaire de faire des développements complémentaires.

C'est le cas en particulier de la cartographie. Malgré l'ajout en V17 des fonctionnalités de cartographie héritées du SDK ANDROID, je suis en train de développer une application et un moteur cartographique complet (voir CartoTopo ou CartoTopoLight sur le market).

En effet, WM17 reprend la cartographie du SDK Android, et donc nécessite une connexion internet. Qui plus est la seule source est le site googlemaps.

Voulant utiliser des sources comme OpenStreetMap, et surtout disposer d'une cartographie off-line, j'ai commencé ce développement.

Après avoir testé la classe OSMDroid (voir mes posts à ce sujet), j'ai vite été confronté au souci des "callbacks montants" (ie de Java vers VM) qui ne sont pas encore possibles (il parait que la version 061h permet l'encapsulation en Java de procédure WM, mais comme elle ne marche pas encore chez moi .... voir mon autre post d'aujourd'hui ... ). Conclusion : on fait tout à la main.

Ce post a pour but de présenter quelques astuces que j'ai découvertes :
- dans une fenêtre WM bien chargée (avec beaucoup d'objet), les tailles des objets ancrés ne sont pas redimensionnés tout de suite, et donc les valeurs de dimension ne sont pas bonne dans le call back "changement d'orientation" ... la solution : un timer à un coup d'une seconde qui permet de récupérer les bonnes tailles au bout d'une seconde (curieusement MultiTaches (-100) ne semble pas fonctionner)
- si vous avez une image pour représenter votre carte, ne pas dessiner directement dedans : il y a de gros soucis de rémanence des dessins apportés sur l'image en particulier si vous avez des boutons superposés et que cette carte se déplace
- attention aux DPIs : si vous copiez des images vers d'autres, rechargez les images en redimenssionnant avec le nombre de pixels attendus (le passage à 240 DPI est mortel !)
- faire l'import des cartes en 3 étapes :
  • utiliser une IMG_temp temporaire qui charge les morceaux de la carte
  • copier IMG_temp vers IMG_carte_complete pour faire le patchwork
  • copier la zone intéressante de IMG_carte_complete vers IMG_fenetre
  • les IMG_temp et IMG_carte_complete sont en dehors de la fenêtre et non visibles
  • IMG_fenetre est visible dans la fenetre et va supporter tous les call back de types scroll, click, etc ...
  • la superposition des infos se fait en dessinant dans la fenêtre IMG_carte_complete

- le séquencement des callback est le suivant dans WM :
  • ouverture de la fenêtre
    • "initialisation"
    • "prise de focus"
    • "changement de taille" (si fenêtre plus grande que celle dans l'IDE)
  • rotation de l'appareil (avec la fenêtre principale en focus)
    • "modification de taille"
    • "changement d'orientation"
  • rotation de l'appareil (avec la fenêtre principale non en focus)
    • la procédure "modification de taille" est APPELEE (alors que la fenêtre n'est pas visible)
    • au retour sur la fenêtre principale :
      • "prise de focus"
      • "changement d'orientation"

- le rechargement des dalles et les différentes dessins (POIs) par exemple peut prendre du temps : utiliser du multi-thread (ce n'est pas encore le cas pour mon application) ou lancer le raffraichissement à la fin du scroll

Voilà pour quelques astuces .... je compléterai si j'en trouve d'autres.