2011-08-01 2 views
1

H J'ai écrit un code pour dessiner deux marqueurs de position personnalisés sur le MapField. Mais lorsque j'effectue un zoom avant et arrière, le repère de position est de la même taille, je veux que le marqueur de position s'ajuste en fonction du niveau de zoom. Est-ce que quelqu'un pourrait m'aider à mettre ça?Ajustez le repère de position sur Zoom avant et arrière dans Mapfield

BR, Suppi

modifier:

Jusqu'à présent, je suis en mesure de le faire,

mPointDest = new XYRect[mPoints.length]; 
      for (int i = 0; i < mPoints.length; i++) { 
      XYPoint fieldOut = new XYPoint(); 
      convertWorldToField(mPoints[i], fieldOut); 
      mIcon = Bitmap.getBitmapResource("location.png"); 
     int imgW = mIcon.getWidth(); 
     int imgH = mIcon.getHeight(); 
     mPointDest[i] = new XYRect(fieldOut.x - imgW/2, 
        fieldOut.y - imgH, imgW, imgH); 
      graphics.drawBitmap(mPointDest[i], mIcon, 0, 0); 

et zoom:

protected boolean keyChar(char character, int status, int time) 
    { 
     // 'i' will zoom in. 
     if (character == 'i') 
     { 

       mMapField.setZoom(Math.max(mMapField.getZoom() - 1, mMapField.getMinZoom())); 
       return true; 

     } 
     // 'o' will zoom out 
     if (character == 'o') 
     { 

      mMapField.setZoom(Math.min(mMapField.getZoom() + 1, mMapField.getMaxZoom())); 
      return true; 
     } 

     return super.keyChar(character, status, time); 
    } 

Après cette me demande comment va ajuster le bitmap en fonction du niveau de zoom. Quelqu'un peut-il s'il vous plaît me donner une idée?

+0

J'ai mis à jour mon message. – Suppi

+0

okay, donc vous voulez que votre "location.png" graphique pour zoomer (devenir plus grand/plus petit) basé sur le niveau de zoom de la carte? –

+0

ouais exactement, j'ai aussi dessiné un cercle sur le mapfield, j'ai besoin d'ajuster le cercle en fonction du niveau de zoom. – Suppi

Répondre

1

Le zoom n'a d'impact que sur la carte elle-même. Si vous voulez changer la taille de vos propres graphiques, vous devrez les mettre à l'échelle manuellement. Par exemple, vous pouvez inclure plusieurs tailles de la ressource "location.png" dans votre projet, puis choisir la taille appropriée en fonction du niveau de zoom ou utiliser la méthode Bitmap.scaleInto() pour zoomer votre graphique à la volée. Notez que la méthode à la volée produira un résultat de qualité inférieure à celle de plusieurs tailles du graphique original (bien, je présume que vous avez un original haute résolution que vous rétrécissez pour l'inclure dans votre projet).

+0

Merci beaucoup pour la réponse, Maintenant c'est par rapport à une image. Que faire si je dessine un cercle autour du point de localisation. Comment vais-je changer le bitmap ?? ou d'ailleurs une route de a à b. Vous voulez dire que pour chaque niveau de zoom, je devrais obtenir les pixels de la carte, et en fonction de cela redessiner le bitmap. – Suppi

+0

Oui, exactement. Tout ce que vous dessinez est en rapport avec le domaine, pas avec le monde. D'où les méthodes 'convertWorldToField()' et 'convertFieldToWorld()'. –

+0

J'ai essayé d'utiliser ConvertWorldtoField() pour chaque niveau de zoom, la sortie de ceci ne semble pas changer. Devrait-il changer? – Suppi

Questions connexes