Legen Sie das Bild von Drawable als Markierung in Google Map Version 2 fest

Lesezeit: 4 Minuten

Benutzer-Avatar
NRahman

Ich verwende diesen Teil des Codes, um eine Markierung in a hinzuzufügen MapFragment in Google Maps Version 2.

MarkerOptions op = new MarkerOptions();
op.position(point)
    .title(Location_ArrayList.get(j).getCity_name())
    .snippet(Location_ArrayList.get(j).getVenue_name())
    .draggable(true);
m = map.addMarker(op); 
markers.add(m);

Ich möchte verschiedene Bilder aus meinem Drawable verwenden.

  • Tun BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.current_position_tennis_ball) und dann op.icon(icon);

    – Muhammad Babar

    5. August 2013 um 7:57 Uhr

  • Mr.Babar danke für Ihre Antwort, sie ist gut und hat für mich funktioniert … Sie posten sie als Antwort und ich werde sie akzeptieren … Nochmals vielen Dank.

    – NRahman

    5. August 2013 um 8:02 Uhr

  • @MuhammadBabar können wir das Bild im Titel weitergeben

    – Amitharma

    18. Februar 2014 um 7:22 Uhr

  • @muhammad Ich habe nachgesehen, aber ich kann das nicht … aber es kann Dun …..

    – Amitharma

    19. Februar 2014 um 4:53 Uhr

  • @muhammad Ich möchte den Titel im Bild weitergeben

    – Amitharma

    19. Februar 2014 um 4:54 Uhr

Benutzer-Avatar
Muhammad Babar

So können Sie a einstellen Drawable Als ein Marker.

BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.current_position_tennis_ball)

MarkerOptions markerOptions = new MarkerOptions().position(latLng)
         .title("Current Location")
         .snippet("Thinking of finding some thing...")
         .icon(icon);

mMarker = googleMap.addMarker(markerOptions);

VectorDrawables und XML basierend Drawables tun nicht arbeite damit.

  • Dies ist richtig, obwohl die Verwendung des Wortes “beliebig” Drawable falsch ist. Dadurch können Sie nur BitmapDrawables festlegen. Sie können damit beispielsweise kein Drawable aus XML festlegen.

    – John Leehey

    13. August 2013 um 16:44 Uhr

  • Nun, Sie können – Sie müssen es nur in a malen Canvas Erste (drawable.draw(canvas)), dann entleeren Sie die Canvas zu einem Bitmap.

    – Chris Broadfoot

    14. August 2013 um 9:53 Uhr

  • Leute, davon habe ich jetzt wirklich keine Ahnung! Also lasst die Up-Votes entscheiden, wer Recht hat 🙂

    – Muhammad Babar

    15. August 2013 um 5:47 Uhr

  • Wäre eine gute Frage gewesen, wenn es um Drawable ginge, die auf Code-Behind geändert wurden, aber es ist derzeit eine Frage “Drücken Sie auf Autocomplete”.

    – Léon Pelletier

    5. Februar 2014 um 19:42 Uhr

Benutzer-Avatar
vovahost

Die Antwort von @Lukas Novak zeigt nichts an, da Sie auch die Grenzen festlegen müssen Drawable.

Dies funktioniert für alle drawable. Hier ist ein voll funktionsfähiges Beispiel:

public void drawMarker() {
    Drawable circleDrawable = getResources().getDrawable(R.drawable.circle_shape);
    BitmapDescriptor markerIcon = getMarkerIconFromDrawable(circleDrawable);

    googleMap.addMarker(new MarkerOptions()
            .position(new LatLng(41.906991, 12.453360))
            .title("My Marker")
            .icon(markerIcon)
    );
}

private BitmapDescriptor getMarkerIconFromDrawable(Drawable drawable) {
    Canvas canvas = new Canvas();
    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    canvas.setBitmap(bitmap);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    drawable.draw(canvas);
    return BitmapDescriptorFactory.fromBitmap(bitmap);
}

Kreisform.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size android:width="20dp" android:height="20dp"/>
    <solid android:color="#ff00ff"/>
</shape>

  • Mein erster Marker ist größer als die anderen gezeichnet, ich verwende genau den gleichen Code mit dir. Was könnte der Grund sein? Es ist unabhängig von der Bildquelle, die ich mit anderen ausprobiert habe.

    – Wiedereinsteiger

    2. August 2016 um 11:44 Uhr

  • Ich weiß nicht. Posten Sie einen Code: die drawable-XML oder die cose, die zum Erstellen des drawable verwendet wird, wenn Sie es programmgesteuert erstellen.

    – vovahost

    2. August 2016 um 11:56 Uhr

  • @vovahost Kannst du den Code für die circle_shape.xml posten. Aus irgendeinem Grund gibt circle.getIntrinsicHeight/width für mich 0 zurück

    – Pdksock

    4. August 2016 um 7:19 Uhr

Wenn Sie haben Drawable programmgesteuert erstellt (also haben Sie keine Ressource dafür), können Sie Folgendes verwenden:

Drawable d = ... // programatically create drawable
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
d.draw(canvas);
BitmapDescriptor bd = BitmapDescriptorFactory.fromBitmap(bitmap);

Dann hast du BitmapDescriptorin die Sie übergehen können MarkerOptions.

  • Dadurch entstehen bei mir leere Bilder

    – Anti-Erde

    4. Dezember 2015 um 17:29 Uhr

  • Bitte beachten Sie das von @vovahost gepostete Beispiel für ein voll funktionsfähiges Beispiel dieses Ansatzes. Diese Antwort ist nicht ganz vollständig.

    – AndroidDev

    27. Juli 2016 um 18:17 Uhr

Benutzer-Avatar
Krishna Sony

Wenn Sie verwenden vector drawable Verwenden Sie diese Erweiterung:

fun  Context.bitmapDescriptorFromVector(vectorResId:Int): BitmapDescriptor {
    val vectorDrawable = ContextCompat.getDrawable(this, vectorResId)
    vectorDrawable!!.setBounds(0, 0, vectorDrawable.intrinsicWidth, vectorDrawable.intrinsicHeight)
    val bitmap = Bitmap.createBitmap(vectorDrawable.intrinsicWidth, vectorDrawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
    vectorDrawable.draw(Canvas(bitmap))
    return BitmapDescriptorFactory.fromBitmap(bitmap)
}

Und auf das Markierungssymbol setzen:

val markerOptions = MarkerOptions().position(latLng)
         .title("Current Location")
         .snippet("Thinking of finding some thing...")
         .icon(bitmapDescriptorFromVector("Your icon resource id"))// call extension here

mMarker = googleMap.addMarker(markerOptions)

Benutzer-Avatar
NepaliEntwickler

Verwenden Sie grundsätzlich Bitmap anstelle von drawable. Wenn Sie ein Drawable haben, konvertieren Sie es in Bitmap.

Hier ist ein Codebeispiel in Kotlin.

private fun placeNewMarker(whereToPlaceYourMarker: LatLng){

    val pickupMarkerDrawable = resources.getDrawable(R.drawable.your_marker_drawable,null)


    _pickupMarker =   mMap?.addMarker(MarkerOptions()
            .position(whereToPlaceYourMarker)
            .draggable(true)
            .title("My Marker")
            .icon(BitmapDescriptorFactory.fromBitmap(pickupMarkerDrawable.toBitmap(pickupMarkerDrawable.intrinsicWidth, pickupMarkerDrawable.intrinsicHeight, null))))



}

  • Stimmen Sie zu, um zu zeigen, wie ein Vector Drawable als Markierungssymbol festgelegt wird

    – Machado

    27. August 2020 um 11:47 Uhr

  • Stimmen Sie zu, um zu zeigen, wie ein Vector Drawable als Markierungssymbol festgelegt wird

    – Machado

    27. August 2020 um 11:47 Uhr

1260000cookie-checkLegen Sie das Bild von Drawable als Markierung in Google Map Version 2 fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy