Autore Topic: Caricamento immagine in un messaggio di info di un marker (google maps)  (Letto 110 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Salve a tutti!

Con la mia applicazione voglio che al tocco su un marker di una mappa di google  si apra la info view con delle informazioni sul relativo marker.

Fin qui tutto a posto e ci riesco, l'info del marker è composto da un testo e da una immagine.
L'immagine la carico usando picasso ma la prima volta che tocco il marker l'immagine non appare, se lo faccio una seconda volta l'immagine si carica correttamente.
Questo comportamento lo fa ogni volta che deve caricare un'immagine la prima volta.

Questo è il codice che utilizzo per caricare l'immagine:
Codice (Java): [Seleziona]
 // Getting view from the layout file info_window_layout
                View v = getLayoutInflater().inflate(R.layout.custom_info_windwows, null);

                ImageView icon=(ImageView) v.findViewById(R.id.Icon);

                TextView tvLat = (TextView) v.findViewById(R.id.tv_lat);

                for(int i=0;i<PericoliCode.length;i++){
                    if(arg0.getTitle().equals(PericoliCode[i])){
                        tvLat.setText(Pericoli[i]);
                        if(!PericoliImage[i].equals("")) {
                            Picasso.with(v.getContext())
                                    .load(PericoliImage[i])
                                    .into(icon);
                        }
                    }
                }

Avete qualche suggerimento? è possibile che si apra prima la info dell'immagine di picasso?

Grazie mille!

Post unito: 03 Ottobre 2016, 10:22:23 CEST
Risolto!

Ho guardato la documentazione di Picasso e ho inserito una callback per l'immagine:
Codice (Java): [Seleziona]
class InfoWindowRefresher implements Callback {
    private Marker markerToRefresh;

    InfoWindowRefresher(Marker markerToRefresh) {
        this.markerToRefresh = markerToRefresh;
    }

    @Override
    public void onSuccess() {
        markerToRefresh.showInfoWindow();
    }

    @Override
    public void onError() {}
}

poi il caricamento è diventato così:
Codice (Java): [Seleziona]
  for(int i=0;i<PericoliCode.length;i++){
                    if(arg0.getTitle().equals(PericoliCode[i])){
                        tvLat.setText(Pericoli[i]);
                        if(!PericoliImage[i].equals("")) {
                            if (not_first_time_showing_info_window) {
                                not_first_time_showing_info_window=false;
                                Picasso.with(v.getContext())
                                        .load(PericoliImage[i])
                                        .into(icon);
                            } else { // if it's the first time, load the image with the callback set
                                not_first_time_showing_info_window=true;
                                Picasso.with(v.getContext())
                                        .load(PericoliImage[i])
                                        .into(icon,new InfoWindowRefresher(arg0));
                            }
                        }
                    }
                }
« Ultima modifica: 03 Ottobre 2016, 10:22:23 CEST da ValerioAdo, Reason: Merged DoublePost »