2016-05-20 14 views
0

Ich möchte ein dynamisches Bild im Infofenster anzeigen. Ich kann schon die Bilder von meinem Webservice bekommen, aber nur das letzte Bild, das in meinen db-Shows gespeichert ist, zu allen Markern, die ich in meine Google Map eingefügt habe. Wie füge ich jedes Bild einzeln zu jedem Marker hinzu?Dynamisches Bild in InfoWinow zu jedem Marker in Android Java anzeigen

Hier ist mein Code:

for (int i = 0; i < json.length(); i++) { 
       e = json.getJSONObject(i); 

        LatLng Location = new LatLng(e.getDouble("latitude"), e.getDouble("longitude")); 
        byte[] decodedByteSmallBitmap = Base64.decode(e.getString("foto"), Base64.DEFAULT); 
        final Bitmap smallBitmap = BitmapFactory.decodeByteArray(decodedByteSmallBitmap , 0, decodedByteSmallBitmap .length); 
        byte[] decodedByteBigBitmap= Base64.decode(e.getString("foto_grande"), Base64.DEFAULT); 
        final Bitmap bigBitmap = BitmapFactory.decodeByteArray(decodedByteBigBitmap, 0, decodedByteBigBitmap.length); 

        markerOptions = createMarker(); 

        // Setting click event handler for InfoWIndow 
        mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 
         @Override 
         public void onInfoWindowClick(Marker marker) { 
          // Remove the marker 
          marker.remove(); 
         } 
        }); 


        mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 

         @Override 
         public View getInfoWindow(Marker arg0) { 
          return null; 
         } 

         @Override 
         public View getInfoContents(Marker marker) { 

          LinearLayout info = new LinearLayout(MainActivity.this); 
          info.setOrientation(LinearLayout.VERTICAL); 

          TextView title = new TextView(MainActivity.this); 
          title.setTextColor(Color.BLACK); 
          title.setGravity(Gravity.CENTER); 
          title.setTypeface(null, Typeface.BOLD); 
          title.setText(marker.getTitle()); 

          image = new ImageView(MainActivity.this); 
          image.setImageBitmap(bigBitmap); 

          TextView snippet = new TextView(MainActivity.this); 
          snippet.setTextColor(Color.GRAY); 
          snippet.setText(marker.getSnippet()); 

          info.addView(title); 
          info.addView(snippet); 
          info.addView(image); 
          return info; 
         } 
        }); 
      } 

Antwort

0

Lassen Sie uns an Ihren Code aussehen:

Sie das Infofenster in Infofenster Adapter bevölkern, die eine Eigenschaft von mMap ist.

mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() ... 

Das bedeutet für jeden Marker von mMap dass Sie die gleiche getInfoContents Methode ausgeführt wird.

Bei jeder Iteration ändern Sie den Info-Fenster-Adapter in einen neuen und das bedeutet, dass Ihr Info-Fenster-Adapter mMap auf den letzten in der Schleife erstellten Info-Fenster-Adapter gesetzt wird.

Das ist Ihre getInfoContents Methode der Info-Fenster Adapter:

@Override 
public View getInfoContents(Marker marker) { 

    LinearLayout info = new LinearLayout(MainActivity.this); 
    info.setOrientation(LinearLayout.VERTICAL); 

    TextView title = new TextView(MainActivity.this); 
    title.setTextColor(Color.BLACK); 
    title.setGravity(Gravity.CENTER); 
    title.setTypeface(null, Typeface.BOLD); 
    title.setText(marker.getTitle()); 

    image = new ImageView(MainActivity.this); 
    image.setImageBitmap(bigBitmap); 

    TextView snippet = new TextView(MainActivity.this); 
    snippet.setTextColor(Color.GRAY); 
    snippet.setText(marker.getSnippet()); 

    info.addView(title); 
    info.addView(snippet); 
    info.addView(image); 
    return info; 
} 

Für den Titel, den Sie die Funktion verwendet marker.getTitle() und für das Snippet verwendet man marker.getSnippet() aber für das Bild, das Sie haben gerade die Parameter bigBitmap gegeben. Dies bedeutet, dass Ihr Info-Fenster für jeden Marker dasselbe Bitmap verwendet: zuletzt bigBitmap. Sie müssen also eine Methode wie marker.getBitmap() haben, die die Bitmap zurückgibt, die dem Marker zugeordnet ist. Ich denke, Sie können dies erreichen, indem Sie die createMarker Funktion ändern.

Sie ein Beispiel für Bevölkerung des Bildes sehen hier (in der Funktion: Render): https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/MarkerDemoActivity.java#L117