infoWindows Bild wird jetzt beim ersten Klick angezeigt, aber beim zweiten Klick funktioniert es
Mein Android nutzt die Google Map Android-API. InfoWindows Bild wird beim ersten Klick nicht angezeigt, funktioniert aber beim zweiten Klick.
Ich passe das infoWindow mit @
void setMapInfoWindow(){
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@Override
public View getInfoContents(Marker arg0) {
View v = getLayoutInflater().inflate(R.layout.windowlayout, null);
final ImageView img = (ImageView)v.findViewById(R.id.imageView3);
//image
Picasso.with(context).load("http://imgurl").resize(140,
}
});
}
Hier ist mein Marker-Einrichtungsprozess
void setMarkers(){
...
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject datas=jsonArray.getJSONObject(i);
MarkerOptions tmp=new MarkerOptions()
.title("name")
.alpha(0.6f)
.position(new LatLng(123,456));//replace LatLng with sample
marker=mMap.addMarker(tmp);
}
....
setMapInfoWindow();
}
Nachdem ich die Einstellung des Markers abgeschlossen habe, rufe ich das @ ausetMapInfoWindow()
Funktion.
Es funktioniert auf meinem Smartphone, aber wenn Sie zum ersten Mal auf das infoWindow klicken, wird das Bild nicht angezeigt. aber es zeigt beim zweiten Klick.
Ich teste für einige Fälle:
Ersetzen Sie das Web-Image durch ein lokales Image. Das Problem tritt weiterhin auf.speichere alle Marker in ArrayList, setze nach Abschluss des gesamten Prozesses alle Marker aufshowInfoWindow()
, dann setze alle Marker aufhideInfoWindow()
. Es funktioniert, aber es gibt ein infoWindow, das nicht geschlossen werden kann (das letzte). Ich versuche die Bitmap zu verwenden, um das Bild zu erhalten, aber es wird kein Bild angezeigt. Ich versuche viele Wege aus dem Stapelüberlauf. Aber es funktioniert, wenn Sie die Picasso-Bibliothek verwenden.Vielen Dan
das Problem wurde gelöst durch: Es scheint, dass die Bild-URL des Google-Webdienstes beim Laden in eine andere URL geändert wird.
Beispiel
https: //maps.googleapis.com/maps/api/place/photo? photoreference =
it wird von Google in folgende URL geändert:
https: //lh4.googleusercontent.com ......
so ändere ich das boolesche not_first_time_showing_info_window auf int und rufe es dreimal zurück
int not_first_time_showing_info_window=0;
//show image
try {
if(not_first_time_showing_info_window==2){
not_first_time_showing_info_window=0;
Picasso.with(HomeActivity.this).load("http://....").resize(600,400).into(img);
}
else if (not_first_time_showing_info_window==1) {
not_first_time_showing_info_window++;
Picasso.with(HomeActivity.this).load("http://....").resize(600, 400).into(img,new InfoWindowRefresher(marker));
}else if(not_first_time_showing_info_window==0){
not_first_time_showing_info_window++;
Picasso.with(HomeActivity.this).load("http://....").resize(600,400).into(img,new InfoWindowRefresher(marker));
}
} catch (Exception e) {
img.setImageDrawable(null);
}