2013-07-06 11 views
10

Ora ho un problema che non riesco a recuperare e visualizzare l'icona personalizzata in Google Maps dall'URL. Per quanto riguarda l'esempio di Google, solo l'icona deve essere visualizzata nella mappa di Google. Ma quello che voglio sapere è visualizzare l'icona dall'URL.icona google mapv2 per Android dall'URL

private Marker melbourne = mMap.addMarker(new MarkerOptions() 
          .position(MELBOURNE) 
          .title("Melbourne") 
          .snippet("Population: 4,137,400") 
          .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow))); 

e qui è la mia codifica.

  if(c != null){   
       if(c.moveToFirst()){ 
        do { 
         googleMap.addMarker(new MarkerOptions() 
         .position(new LatLng(Double.parseDouble(c.getString(2)), Double.parseDouble(c.getString(3)))) 
         .title(c.getString(0)) 
         .icon(BitmapDescriptorFactory.fromBitmap(bmp)) 
         .snippet(c.getString(1))); 
        } while(c.moveToNext()); 
       }    
      } 
+0

fare una richiesta HTTP scaricare la bitmap e utilizzare lo stesso. – Raghunandan

+0

puoi menzionare l'esempio completo? – ppshein

+0

Ho risposto qui [https://stackoverflow.com/questions/22139515/set-marker-icon-on-google-maps-v2-android-from-url/47471289#47471289](https://stackoverflow.com/questions/22139515/set-marker-icon-on-google-maps-v2-android-from-url/47471289 # 47471289) –

risposta

7

È possibile scaricare bitmap come

Bitmap bmp = BitmapFactory.decodeStream(myurl.openConnection().getInputStream()); 

Utilizzato un filo per ottenere la bitmap

Poi

.icon(BitmapDescriptorFactory.fromBitmap(bmp))); 

Dai vostri commenti si ottiene NetworkOnMainThreadException

Quindi usa una discussione.

Thread thread = new Thread(new Runnable(){ 
@Override 
public void run(){ 
    URL url ; 
    try { 
     url = new URL("myurl"); 
     bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      source = mMap.addMarker(new MarkerOptions() 
        .position(sc) 
        .title("MyHome") 
        .snippet("Bangalore") 
        .icon(BitmapDescriptorFactory.fromResource(bmp))); 
     } 
    }); 
} 
}); 
thread.start(); 

Non è possibile aggiornare ui da un thread in background. utilizzare runOnUiThread.

Utilizzando asycntask

Fai i tuoi asycn taks una classe interna della vostra attività. Dichiara Bitmap come variabile di classe.

class TheTask extends AsyncTask <Void,Void,Void> 
{ 
@Override 
protected void onPreExecute() { 
    // TODO Auto-generated method stub 
    super.onPreExecute(); 

} 
@Override 
protected Void doInBackground(Void... params) { 
    URL url ; 
    try { 
    url = new URL("myurl"); 
    bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    return null; 
} 
@Override 
protected void onPostExecute(Void result) { 

super.onPostExecute(result); 
    source = mMap.addMarker(new MarkerOptions() 
    .position(sc) 
    .title("MyHome") 
    .snippet("Bangalore")                      
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));          
    } 
} 
+0

non riesco a ottenerlo. Errore. Si prega di fornire di più? – ppshein

+0

@ppshein quale errore hai ricevuto. è necessario ottenere la bitmap dall'URL usando un thread. – Raghunandan

+0

URL myurl = new URL ("http://www.test.com/about.jpg"); Bitmap bmp = BitmapFactory.decodeStream (myurl.openConnection(). GetInputStream()); – ppshein

6

Ho utilizzato Ion per caricare un'immagine. è una libreria molto buona.

per impostare l'icona del marker da url è molto semplice.

try { 
     Bitmap bmImg = Ion.with(context) 
       .load("http://example.com").asBitmap().get(); 

     mMap.addMarker(new MarkerOptions().position(latlng) 
       .icon(BitmapDescriptorFactory.fromBitmap(bmImg))); 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

speranza questo aiuto

+0

come cambiare la dimensione dell'immagine o se l'utente aggiunge un enorme URL di immagine cosa succederà hai mai provato? – mehmet

+1

@mehmet è possibile creare una nuova bitmap ridimensionata dalla bitmap originale come: Bitmap ridimensionataBitmap = Bitmap.createScaledBitmap (bmImg, bmImg .getWidth()/2, bmImg .getHeight()/2, false); – josher932

+0

bene ho risolto con la libreria Picasso https://github.com/square/picasso – mehmet

Problemi correlati