Je veux afficher une carte google statique sur une imageview. Quelque chose de similaire à "Whatsapp" montrant tout en partageant l'emplacement. Comment puis-je faire cela ?
Réponses
Trop de publicités?Google offre l'API de carte statique pour laquelle vous avez besoin d'une clé API.
Vous pouvez télécharger un bitmap configuré dynamiquement à partir du Web, le stocker sur le système de fichiers ou dans la mémoire, puis obtenir un drawable à partir de celui-ci afin de le définir dans l'ImageView.
Vous devez générer une url à partir de vos coordonnées pour charger les données depuis le web en utilisant cette url. Exemple pour un bitmap de 200x200 montrant la Tour Eiffel à Paris :
String latEiffelTower = "48.858235";
String lngEiffelTower = "2.294571";
String url = "http://maps.google.com/maps/api/staticmap?center=" + latEiffelTower + "," + lngEiffelTower + "&zoom=15&size=200x200&sensor=false&key=YOUR_API_KEY"
StackOverflow a déjà répondu à la question de savoir comment télécharger une image du web pour l'afficher dans une vue d'image : enlace
Vous pouvez trouver ici la documentation pour le API Google Static Maps .
public static Bitmap getGoogleMapThumbnail(double lati, double longi){
String URL = "http://maps.google.com/maps/api/staticmap?center=" +lati + "," + longi + "&zoom=15&size=200x200&sensor=false";
Bitmap bmp = null;
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(URL);
InputStream in = null;
try {
in = httpclient.execute(request).getEntity().getContent();
bmp = BitmapFactory.decodeStream(in);
in.close();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bmp;
}
Vous pouvez également afficher une image statique de manière native avec le SDK maintenant (cela a été ajouté en décembre 2014) : https://developers.google.com/maps/documentation/Android/lite
Cela donnera lieu à un MapView.
La vue Web est ma suggestion pour cela.
Créer un fichier html carte_statique.html à l'intérieur du dossier html dans le dossier des actifs
son contenu peut être le suivant
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
html,body{
padding:0;
margin:0;
}
.map{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<img class="map" src="REPLACE_HERE" >
</body>
</html>
Ensuite, créez programmatiquement une URL de carte statique et remplacez REPLACE_HERE avec elle. Puis chargez-la sur la vue web. Cela réduira considérablement notre effort.
Le code est le suivant
try {
String url ="https://maps.googleapis.com/maps/api/staticmap?";
url+="&zoom=13";
url+="&size=600x300";
url+="&maptype=roadmap";
url+="&markers=color:green%7Clabel:G%7C"+latitude+", "+longitude;
url+="&key="+ YOUR_GOOGLE_API_KEY;
InputStream is = context.getAssets().open("html/static_map.html");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
String str = new String(buffer);
str = str.replace("REPLACE_HERE", url);
wv_map.getSettings().setJavaScriptEnabled(true);
wv_map.loadDataWithBaseURL("", str, "text/html", "UTF-8", "");
} catch (IOException e) {
}
Une autre solution est la bibliothèque Picasso : " Une bibliothèque puissante de téléchargement et de mise en cache d'images pour Android "
Vous donnez l'URL d'une image à Picasso et ensuite il fait une requête GET et charge l'image. Si la requête échoue, Picasso peut définir une image par défaut.
Vous pouvez même définir une animation de progression pendant le chargement de l'image.
C'est une solution bonne et propre.
Un exemple :
ImageView ivUrl = (ImageView) view.findViewById(R.id.iv_photo);
Picasso.with(getContext()).cancelRequest(ivUrl);
Picasso.with(getContext())
.load(imageUrlString)
.error(R.drawable.ic_error)
.placeholder(R.drawable.progress_animation)
.into(ivUrl);
- Réponses précédentes
- Plus de réponses