2014-11-15 14 views
9

Ich habe Google Maps V2 in meiner Android App implementiert und jetzt möchte ich etwas anderes machen. Ich zeige eine Position (Länge, Breite) mit einem Marker. Das Problem ist, dass sich dies in meiner Tätigkeit als Map zeigt. Ich möchte es als ImageView anzeigen, und nur wenn jemand darauf klickt, wird die Kartenschnittstelle angezeigt.Android Google Map als Bild anzeigen

Grundsätzlich, was ich tun möchte, ist eine statische Vorschau des Standorts und zeigen Sie es als ein Bild (mit einem Rahmen und abgerundeten Ecken) Klicken Sie dann auf Karten öffnen und geben Sie alle Funktionen.

Gibt es eine Möglichkeit, ein Map-Fragment in ein ImageView zu setzen?

Jede Hilfe, die Sie zur Verfügung stellen können, wird sehr geschätzt.

Dank

Antwort

16

Sie können die Google Maps Einbau-Snapshot-Methode verwenden, um eine Vorschau zu erfassen und in einem ImageView anzuzeigen. Sie können die ImageView auf beliebige Weise stylen und auch einen clickListener festlegen, der etwas bewirkt, wenn auf die Vorschau geklickt wird. Hier ein Beispiel:

LatLng latLng = new LatLng(35.0116363, 135.7680294); 
// Add Marker 
mMap.addMarker(new MarkerOptions().position(latLng)); 
// Center map on the marker 
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(latLng, 4.0f); 
mMap.animateCamera(yourLocation); 

final ImageView mapPreview = (ImageView) findViewById(R.id.mapPreview); 
mapPreview.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Hide the preview, to reveal the map 
     mapPreview.setImageBitmap(null); 
     mapPreview.setLayoutParams(new RelativeLayout.LayoutParams(0, 0)); 

     // Or start Google Maps app 
//  String uri = String.format(Locale.ENGLISH, "geo:%f,%f", 50.0, 0.1); 
//  Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 
//  startActivity(intent); 
    } 
}); 

mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { 
    @Override 
    public void onMapLoaded() { 
     // Make a snapshot when map's done loading 
     mMap.snapshot(new GoogleMap.SnapshotReadyCallback() { 
      @Override 
      public void onSnapshotReady(Bitmap bitmap) { 
       mapPreview.setLayoutParams(new RelativeLayout.LayoutParams(
         ViewGroup.LayoutParams.MATCH_PARENT, 
         ViewGroup.LayoutParams.MATCH_PARENT)); 
       mapPreview.setImageBitmap(bitmap); 

       // If map won't be used afterwards, remove it's views 
//    ((FrameLayout)findViewById(R.id.map)).removeAllViews(); 
      } 
     }); 
    } 
}); 
+0

Können Sie bitte vollständigen Code zur Verfügung stellen – Abhishek

11

Es ist eine etwas andere Option, die das gleiche Ergebnis und erfordert nur sehr wenig Codierung erreichen können, sofern Ihre Anwendung auf das Netzwerk verwenden können: Sie können die Google Static Maps API fordern ein Kartenbild zu fragen, mit beliebigen Mittelpunkt, Zoomstufe, Größe und andere Funktionen wie Markierungen und Pfade.

Zum Beispiel der Link:

https://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=14&size=600x300

ergibt folgendes Bild:

enter image description here

Dies macht es sehr einfach, in einem ImageView Widget eine Karte anzuzeigen: Sie müssen nur Erstellen Sie die entsprechende URL aus den Standortdaten und -dimensionen, und zeigen Sie dann das Bild mit einem der Bildladeframeworks an, z. B. Picasso, Volley, & c. Wir nutzen diese Funktion seit einigen Jahren.

Dies ist besonders nützlich, wenn z. B. eine ListView kleine Karten angezeigt werden. In diesen Situationen wird die Frage nach n Snapshots problematisch sein, während n Image-Downloads sollte gut funktionieren.


Eine dritte Option, die in der nächsten Woche verfügbar sein wird oder so, nach this announcement, ist der neue Lite Karten Modus, der als Teil der Google Play-Dienste veröffentlicht wird 6.5:

Darüber hinaus gibt es auch eine neue 'Lite-Modus' Kartenoption, ideal für Situationen, in denen Sie eine Anzahl von kleineren Karten, oder eine Karte, die so klein ist, dass sinnvolle Interaktion nicht praktikabel ist, wie als ein Miniaturansicht in einer Liste Eine Lite-Modus-Map ist ein Bitmap-Bild einer Karte an einer angegebenen Position und Zoomstufe.

Im Lite-Modus werden Marker und Formen clientseitig auf das statische Bild gezeichnet, sodass Sie immer noch die volle Kontrolle darüber haben. Der Lite-Modus unterstützt alle Kartentypen, die Ebene "Meine Position" und eine Untermenge von die Funktionalität einer vollständig interaktiven Karte.

Klingt genau wie, was Sie brauchen, vorausgesetzt, Sie können ein paar Tage auf das aktualisierte SDK warten. :)

+0

Vielen Dank für die Antwort. Die zwei Antworten hier sind gleich groß. Ich bewerte, welcher mir am besten steht. Vielen Dank!!!! – tzuvy

+0

@tzuvy Hoffe es hat geholfen! Übrigens wurde gerade eine neue Funktion als Teil von Play Services angekündigt, von der ich denke, dass sie eine noch bessere Lösung sein wird. Bearbeitete Antwort entsprechend. – matiash